我已经阅读了相关的相关问题,但我觉得我并不喜欢它。如果我有一个包含许多节点和后续子节点的XML文档,如果我不知道子节点的深度,我该如何遍历文档呢?
这是一些可怕的代码来演示我的意思:
foreach (var section in xml.Sections.Keys)
{
cont.ContentControls.Add(new Separator(xml.Sections[section].Name));
foreach (var variable in xml.Sections[section].Variables)
{
TraverseVars(cont, xml.Sections[section].Name, variable.Value.Name, variable.Value.Title, variable.Value.Default1, variable.Value.Default2, variable.Value.Default3, variable.Value.DesignerType);
i++;
}
if (xml.Sections[section].Sections.Count > 0)
{
foreach (var section2 in xml.Sections[section].Sections.Keys)
{
cont.ContentControls.Add(new Separator(xml.Sections[section].Sections[section2].Name));
foreach (var variable2 in xml.Sections[section].Sections[section2].Variables)
{
TraverseVars(cont, xml.Sections[section].Name, variable2.Value.Name, variable2.Value.Title, variable2.Value.Default1,
variable2.Value.Default2, variable2.Value.Default3, variable2.Value.DesignerType);
i++;
}
}
}
}
这里我只在有一个嵌套级别(“if ...... Count> 0”)时才提供服务。我知道有更好的方法来满足嵌套级别,但我看不到它。
答案 0 :(得分:3)
答案 1 :(得分:3)
为此你必须创建一个递归函数,它会自动调用它,直到嵌套的xml循环没有结束......
这是一个例子......
如果有任何错误,请修复......
public void xmlsection(XmlSection Section)
{
cont.ContentControls.Add(new Separator(xml.Sections[section].Name));
foreach (var variable in xml.Sections[section].Variables)
{
TraverseVars(cont, xml.Sections[section].Name, variable.Value.Name, variable.Value.Title, variable.Value.Default1, variable.Value.Default2, variable.Value.Default3, variable.Value.DesignerType);
i++;
}
if (xml.Sections[section].Sections.Count > 0)
{
foreach (var section2 in xml.Sections[section].Sections.Keys)
{
xmlsection(section2);
}
}
}