首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历xml文件,维护层次结构级别

遍历xml文件,维护层次结构级别
EN

Stack Overflow用户
提问于 2011-03-14 17:44:47
回答 1查看 288关注 0票数 0

我正在尝试编写一个函数来迭代我的xml文件-然后使用找到的数据在dotnetcharting中再次生成我的树形图。

例如,如果我有以下xml文件(很糟糕,但只是编造的!)

代码语言:javascript
复制
<root>
    <Player>
        <firstname/>
        <lastname/>
     </Player>

     <Team>
         <Name/>
          <Country>
              <League>
              </League>
         </Country
     </Team>
</Root>

然后我的想法是,我将有一个树形图,其中我将有我的根节点,然后从这个开始,我将有球员和团队。然后,每个子节点的每一个,直到最后一个节点将是数据。

代码语言:javascript
复制
  XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
  while (rdr.Read())
  {
    if (rdr.NodeType == XmlNodeType.Element)
    {
      Console.WriteLine(rdr.LocalName);
    }
  }

我知道我可以像这样读取xml文件,但是我没有办法维护任何形式的层级结构,所以我不能告诉dotnetcharting什么是什么父节点?

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2011-03-14 21:19:39

为此,我将使用递归。就我个人而言,我有一个返回TreeNode的函数,如果当前节点包含子元素节点,则调用自身,如下所示:

代码语言:javascript
复制
static class XmlProcessor
{

    public static TreeNode ProcessXml(XmlReader reader)
    {
        // Move to first element
        while(reader.Read() && reader.NodeType != XmlNodeType.Element){}
        return ParseNode(reader);

    }

    private static TreeNode ParseNode(XmlReader reader)
    {
        if (reader.NodeType == XmlNodeType.Text) return new TreeNode(reader.Value);
        if (reader.IsEmptyElement) return new TreeNode(reader.Name);

        TreeNode current = new TreeNode(reader.LocalName);
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                current.Nodes.Add(ParseNode(reader));
            }
            else if (reader.NodeType == XmlNodeType.EndElement)
            {
                return current;
            }
        }
        return current;
    }

}

这可以使用以下命令从应用程序中调用:

代码语言:javascript
复制
TreeNode processedNodes = null;
using (XmlReader reader = XmlReader.Create(new System.IO.StringReader(xml))){
  processedNodes = XmlProcessor.ProcessXml(reader);
}

using块确保XmlReader一旦超出作用域,就会被关闭并正确处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5296949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档