我尝试从 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);
}
Run Code Online (Sandbox Code Playgroud)
对于文件
<?xml version="1.0" encoding="utf-8" ?>
<root>
<foo>3</foo>
<foo>4</foo>
</root>
Run Code Online (Sandbox Code Playgroud)
产出
Element root at line 2.
Element foo at line 3.
Element foo at line 4.
Run Code Online (Sandbox Code Playgroud)
我认为对于 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。