xml文件的递归函数(层次结构数据)

时间:2020-03-05 18:48:34  来源:igfitidea点击:

我有以下格式的XML文件:

<categories>
  <category id="1"></category>
  <category id="2">
    <category id="3"></category>
    <category id="4">
      <category id="5"></category>
    </category>
  </category>
</categories>

谁能给我一些指导,说明如何使用C#遍历文件?

解决方案

回答

首先,System.XML提供了一些使用XML的出色方法。

我假设我们已将XML加载到XMLDocument中,这样做使我们可以使用XPath选择器,或者只是遍历DOM。

这样的事情将使用递归从任何元素返回到顶部:

public XmlNode WalkToTopNode (XmlNode CurrentNode)
{
    if (CurrentNode.ParentNode == null)
        return CurrentNode;
    else
        return WalkToTopNode(CurrentNode.ParentNode);
}

使用递归通过ID查找节点可以像这样完成(注意,我在文本框中键入了它,可能是错误的):

public XmlNode GetElementById (string id, XmlNode node)
{
    if (node.Attributes["id"] != null && node.Attributes["id"].InnerText == id)
    {   
        return node;
    }
    else
    {
        foreach (XmlNode childNode in node.Children)
        {
            return GetElementById(id, childNode);
        }
    }

    return null;    
}

但是,如果在System.XML中内置了许多更好的节点遍历方法时使用了递归,则可能是时候重新考虑策略了。