我正在尝试编写一个函数来迭代我的xml文件-然后使用找到的数据在dotnetcharting中再次生成我的树形图。
例如,如果我有以下xml文件(很糟糕,但只是编造的!)
<root>
<Player>
<firstname/>
<lastname/>
</Player>
<Team>
<Name/>
<Country>
<League>
</League>
</Country
</Team>
</Root>然后我的想法是,我将有一个树形图,其中我将有我的根节点,然后从这个开始,我将有球员和团队。然后,每个子节点的每一个,直到最后一个节点将是数据。
XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
Console.WriteLine(rdr.LocalName);
}
}我知道我可以像这样读取xml文件,但是我没有办法维护任何形式的层级结构,所以我不能告诉dotnetcharting什么是什么父节点?
有什么帮助吗?
发布于 2011-03-14 21:19:39
为此,我将使用递归。就我个人而言,我有一个返回TreeNode的函数,如果当前节点包含子元素节点,则调用自身,如下所示:
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;
}
}这可以使用以下命令从应用程序中调用:
TreeNode processedNodes = null;
using (XmlReader reader = XmlReader.Create(new System.IO.StringReader(xml))){
processedNodes = XmlProcessor.ProcessXml(reader);
}using块确保XmlReader一旦超出作用域,就会被关闭并正确处理。
https://stackoverflow.com/questions/5296949
复制相似问题