C# 如何从XmlElement或XPathNavigator获取行号

C# 如何从XmlElement或XPathNavigator获取行号,c#,xml,xpath,C#,Xml,Xpath,我尝试从XmlNode(一个XmlElement)获取行号,但它不能转换为IXmlLineInfo。所以我尝试使用XPathNavigator,但它也不起作用 如何获取其行号?在XPathDocument(代码段)上使用XPathNavigator对我来说效果很好 XPathDocument doc = new XPathDocument("XMLFile1.xml"); foreach (XPathNavigator element in doc.CreateNavigator

我尝试从XmlNode(一个XmlElement)获取行号,但它不能转换为IXmlLineInfo。所以我尝试使用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> 

我认为对于XmlDocument,您需要扩展DOM实现。如果您想操作XML文档,那么现在在.NET世界中,我会使用XDocument/XElement,在那里您可以设置加载选项以确保获得IXmlLineInfo,请参见和。

我非常确定您的角色类型中存在键入错误,例如缺少括号。但这只是没有代码的推测。无法测试,但对我来说很好。我不知道为什么它对我不起作用,但我改变了阅读文档的方式,使用XDocument而不是XmlDocument,它工作得很好!谢谢在我的例子中,xml是从上游拉入的内存中,所有xml都在第1行。对于这种情况,请改用
.LinePosition
——效果很好。
Element root at line 2.
Element foo at line 3.
Element foo at line 4.