3

我昨天问的一个关于如何使用路径访问元素的问题得到了这个答案-

有可能做相反的事情吗?意味着如果我使用 GetElementsByTagName 方法找到特定元素(xml 中的级别 4),是否有办法获取此元素的路径并将其分配给变量以供以后使用?

<?xml version="1.0" encoding="utf-8" ?>
<level1> 
    <level2> 
        <level3>header3</level3> 
            <level4>header4</level4> 
        <level3>header31</level3> 
    </level2> 
    <level2> 
        <level3>nnn</level3> 
        <level3>nnnnn</level3> 
    </level2> 
</level1> 
4

3 回答 3

1

假设您已通过以下方式提取节点

XmlNodeList nl = doc.GetElementsByTagName("level4");

然后

        XmlNode node = nl[0]; 
        String sPath = node.Name;
        System.Xml.XmlNode np = node.ParentNode;
        while (np != null && np.NodeType != XmlNodeType.Document)
        {
            sPath = String.Format("{0}/{1}", np.Name, sPath);
            np = np.ParentNode;
        }
        sPath = "/" + sPath;
        Debug.WriteLine(sPath);

你得到“/level1/level2/level4”作为sPath的值

*注意:这是正确的,因为在输入 XML 中level3level4的 Sibling (不是 Parent )

于 2012-09-27T14:03:48.463 回答
1

使用可以在 System.Xml 中找到的 XmlDocument 对象,然后使用 ParentNode 属性,直到您获得 null ParentNode。使用递归函数来实现这一点。

于 2012-09-27T13:32:29.153 回答
0

XmlElement 对象已经有一个指向父对象的指针,因此通过从父对象到祖父对象直到到达文档,您将获得相反的层次结构。

于 2012-09-27T13:33:36.403 回答