标题说明了一切......
使用System.Xml.XmlNode
时,是否可以从System.Xml.XmlDocument
获取行号/位置?
我想要这些信息,以便我可以告知用户他们需要在Xml文件中查找特定信息的位置。我在SO上看到了与XmlReader
相关的类似问题但实际上没有回答我的问题。
我想我可以在xml文件中搜索我感兴趣的节点的OuterXml
,但这看起来很糟糕,如果该信息多次出现在文件中该怎么办?必须有更好的方法吗?
更新 我使用:
加载我的xml文件xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load(filename);
答案 0 :(得分:0)
我不确定这是否有助于某人,但我的目标与OP相似。在我的特定情况下,我有一个XmlDocument,我需要有所有Textbox节点的行号。由于我得到了相同的Exception MadSkunk描述,我认为唯一的是创建一个XPathDocument实例并进行转换。
Richard Schneider的回答帮助我想象出这一点。所以我现在的方法是这样的:
public Dictionary<int, string> GetLineNumber()
{
Dictionary<int, string> attrByLineNumber = new Dictionary<int, string>();
MemoryStream xmlStream = new MemoryStream();
_xmlDoc.Save(xmlStream);
xmlStream.Position = 0;
XPathDocument pathDocument = new XPathDocument(xmlStream);
foreach (XPathNavigator element in pathDocument.CreateNavigator().Select("//*"))
{
if (element.Name.Equals("Textbox"))
{
attrByLineNumber.Add(((IXmlLineInfo)element).LineNumber, element.GetAttribute("Name", ""));
}
}
return attrByLineNumber;
}
答案 1 :(得分:-1)
您可以使用IXmlLineInfo interface执行此操作。
我知道,对于XDocument
和XPathDocument
,您只需将节点转换为IXmlLineInfo
即可。我认为它也可以使用XmlDocument。