c#:使用XmlDocument解析XML时的行信息

本文关键字:信息 XML 解析 使用 XmlDocument | 更新日期: 2023-09-27 17:49:39

使用XmlDocument解析XML文件并在以后仍然保留错误消息的行信息,我有哪些选项?(顺便问一句,是否可以对XML反序列化做同样的事情?)

选项似乎包括:

  • 扩展DOM并使用IXmlLineInfo
  • 使用XPathDocument

c#:使用XmlDocument解析XML时的行信息

我知道的唯一其他选项是XDocument.Load(),其过载接受LoadOptions.SetLineInfo。这将以与XmlDocument大致相同的方式消耗。

示例

(扩展@Andy评论的答案)

没有内置的方法来做到这一点使用XmlDocument(如果你正在使用XDocument,你可以使用XDocument.Load()过载接受LoadOptions.SetLineInfo -见这个问题)。

虽然没有内置的方法,但您可以从这里(来自SharpDevelop项目)使用PositionXmlDocument包装器类:

https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs

为了使用它,您将需要使用接受XmlReaderLoad重载(其他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);