遍历xml中的所有节点并保存路径&节点值

时间:2015-06-06 22:37:18

标签: c# xml xpath

我有以下xml(见图片),有多级子节点。 我想获得每个节点的价值和完整路径。 我试图迭代所有节点,但是大子节点没有在循环中进行编译。如果我在循环中运行循环然后我得到所有节点但我不觉得它是正确的方式,因为一些子节点也有大子节点,对于那些我将不得不写另一个循环。 有没有更简单的方法从c#中的xml获取所有节点的路径和值?

XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(@"~/XmlFiles/test_uwe.xml"));

XmlNodeList elemList = doc.GetElementsByTagName("Page1");

foreach (XmlNode node in elemList) 
{
   //Loop goes here but doesn't catches grand child.
}

Xml with multi level child nodes

1 个答案:

答案 0 :(得分:1)

不确定您对祖子节点的意思:那些是文档元素中的子节点吗?

我认为你正在尝试的东西是迭代所有的XmlNodes和日志,并且每个XmlNode也检查它的ChildNodes并为每个ChildNode做同样的事情:

ProcessNodes(doc.DocumentElement.ChildNodes);

private void ProcessNodes(XmlNodeList xmlNodes) {
    foreach (XmlNode xmlNode in xmlNodes) {
        //TODO: Do something here with xmlNode, like logging Name and value

        //Now call ProcessNodes for it's ChildNodes
        ProcessNodes(xmlNode.ChildNodes);
    }
}

如果您还想记录DocumentElement,还可以将inputParameter更改为XmlNode。迭代的概念保持不变:

ProcessNode(doc.DocumentElement);

private void ProcessNode(XmlNode xmlNode) {
    //TODO: Do something here with xmlNode, like logging Name and value

    foreach (XmlNode childNode in xmlNode.ChildNodes) {
        //Now call ProcessNode for it's Child
        ProcessNode(childNode);
    }
}