C#:使用XmlDocument解析XML时的行信息
使用XmlDocument解析XML文件有什么选择,并且稍后仍保留错误消息的行信息? (顺便说一句,XML反序列化是否可以做同样的事情?)
选项似乎包括:
- 扩展DOM并使用IXmlLineInfo
- 使用XPathDocument
我所知道的唯一其他选项是XDocument.Load()
,其重载接受LoadOptions.SetLineInfo
。 这将以与XmlDocument
非常相同的方式使用。
例
(扩大@Andy评论的回答)
使用XmlDocument
没有内置的方法(如果你使用XDocument
,你可以使用接受LoadOptions.SetLineInfo
的XDocument.Load()
重载 – 请参阅此问题 )。
虽然没有内置方法,但您可以使用此处的PositionXmlDocument
包装类(来自SharpDevelop项目):
为了使用它,您将需要使用接受XmlReader
的Load
重载(其他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);