c#:使用XmlDocument解析XML时的行信息
本文关键字:信息 XML 解析 使用 XmlDocument | 更新日期: 2023-09-27 17:49:39
使用XmlDocument解析XML文件并在以后仍然保留错误消息的行信息,我有哪些选项?(顺便问一句,是否可以对XML反序列化做同样的事情?)
选项似乎包括:
- 扩展DOM并使用IXmlLineInfo 使用XPathDocument
我知道的唯一其他选项是XDocument.Load()
,其过载接受LoadOptions.SetLineInfo
。这将以与XmlDocument
大致相同的方式消耗。
(扩展@Andy评论的答案)
没有内置的方法来做到这一点使用XmlDocument
(如果你正在使用XDocument
,你可以使用XDocument.Load()
过载接受LoadOptions.SetLineInfo
-见这个问题)。
虽然没有内置的方法,但您可以从这里(来自SharpDevelop项目)使用PositionXmlDocument
包装器类:
为了使用它,您将需要使用接受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);