2014-07-03 51 views
2

我尝试从XmlNode(这是一个XmlElement)获取行号,但无法将其转换为IXmlLineInfo。所以我尝试使用XPathNavigator,但它也不起作用。如何从XmlElement或XPathNavigator获取行号

我怎样才能得到它的行号?

+0

我很确定你的演员中有一个错字,就像缺少括号。然而这只是没有代码的猜测。 – Kilazur

回答

3

它通过一个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.aspxhttp://msdn.microsoft.com/en-us/library/system.xml.linq.loadoptions%28v=vs.110%29.aspx

+0

不能测试,但是,对我来说看起来很好。 – Kilazur

+0

我不知道为什么它不适合我,但我改变了我阅读文档的方式,使用XDocument而不是XmlDocument,它工作正常! 谢谢! – SeyoS