使用System.Xml.XmlDocument时,是否可以从System.Xml.XmlNode获取行号/位置?

时间:2014-02-01 21:06:53

标签: c# xml .net-3.5 xmlnode

标题说明了一切......

使用System.Xml.XmlNode时,是否可以从System.Xml.XmlDocument获取行号/位置?

我想要这些信息,以便我可以告知用户他们需要在Xml文件中查找特定信息的位置。我在SO上看到了与XmlReader相关的类似问题但实际上没有回答我的问题。

我想我可以在xml文件中搜索我感兴趣的节点的OuterXml,但这看起来很糟糕,如果该信息多次出现在文件中该怎么办?必须有更好的方法吗?

更新 我使用:

加载我的xml文件
xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load(filename);

2 个答案:

答案 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执行此操作。

我知道,对于XDocumentXPathDocument,您只需将节点转换为IXmlLineInfo即可。我认为它也可以使用XmlDocument。