C#:使用XmlDocument解析XML时的行信息
对于使用XmlDocument解析XML文件并且稍后仍保留错误消息的行信息,我有什么选择? (顺便说一句,是有可能做同样的事情XML Deserialisation?)C#:使用XmlDocument解析XML时的行信息
选择似乎包括:
(扩大从@小宝的评论答案)
没有内置的方式做到这一点使用XmlDocument
(如果你使用XDocument
,则可以使用XDocument.Load()
过载,它接受LoadOptions.SetLineInfo
- 见this question)。
虽然没有内置的方式,你可以使用PositionXmlDocument
包装类从这里(从SharpDevelop项目):
为了使用它,你将需要使用Load
超载,接受XmlReader
(其他Load
重载将转到正常的XmlDocument
类,这不会给你线路号码信息)。如果您当前使用的XmlDocument.Load
重载接受一个文件名,你就需要改变你的代码如下:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
现在,你应该能够从本文档中施放任何XmlNode
到PositionXmlElement
检索行号和列:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);
这对添加retrospectivley非常有用 - 我已经写了很多基于XmlDocument的代码,并且只需添加此文件,然后添加3行代码就可以获得有用的位置用户反馈:)...您需要添加'使用ICSharpCode.WpfDesign.XamlDom;' - 这可能对C#用户非常明显,但我对C#是新手:o ... +1! – 2016-10-17 15:17:17
对于目前的.net,这将是伟大的..但不幸的是,我仍然写作为80年代的.net 2.0。 (我会提到的问题,但我不想约会的帖子) – 2011-04-12 23:38:02
我认为可能是这种情况。在另外两个之间,我想我更喜欢'XPathDocument'方法。 – dahlbyk 2011-04-13 12:49:46
坚持使用XmlDocument方法,并将此代码视为包装:https://github.com/icsharpcode/SharpDevelop/blob/master/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/PositionXmlDocument.cs – Andy 2014-07-03 15:10:43