如何从XmlElement或XPathNavigator获取行号

本文关键字:获取 XPathNavigator XmlElement | 更新日期: 2023-09-27 18:11:30

我尝试从XmlNode(这是一个XmlElement)获得行号,但它不能转换为IXmlLineInfo。所以我尝试使用XPathNavigator,但它也不起作用。

我怎么能得到它的行号?

如何从XmlElement或XPathNavigator获取行号

在XPathDocument上使用XPathNavigator对我来说很好,代码片段

    XPathDocument doc = new XPathDocument("XMLFile1.xml");
    foreach (XPathNavigator element in doc.CreateNavigator().Select("//*"))
    {
        Console.WriteLine("Element {0} at line {1}.", element.Name, (IXmlLineInfo)element != null ? ((IXmlLineInfo)element).LineNumber : 0);
    }

文件

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <foo>3</foo>
  <foo>4</foo>
</root> 

输出
Element root at line 2.
Element foo at line 3.
Element foo at line 4.

我认为对于XmlDocument,您需要扩展DOM实现。如果您想操作XML文档,那么现在在。net世界中我会使用XDocument/XElement,在那里您可以设置加载选项以确保获得IXmlLineInfo,请参阅http://msdn.microsoft.com/en-us/library/bb538371%28v=vs.110%29.aspx和http://msdn.microsoft.com/en-us/library/system.xml.linq.loadoptions%28v=vs.110%29.aspx。