我正在尝试编写一个迭代我的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什么是父节点?
任何帮助?
答案 0 :(得分:0)
我会为此使用递归。就个人而言,我会有一个返回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在超出范围时关闭并正确处理。