如何在XML文件中循环遍历节点

时间:2016-06-30 14:27:24

标签: c# xml wpf

我有一个XML文件,其结构大致如下:

<ScenarioList>
    <Scenario>
        ... various things
    </Scenario>
</ScenarioList>

这正在读入WPF对话框。每次用户选择“下一步”时,我都希望将下一个场景数据读入各个字段。显然,用户同样点击“上一步”按钮也是如此。

但问题是:我如何阅读所选Scenario节点的信息?

让我试着澄清这个问题,因为它似乎“过于宽泛”:

我熟悉加载和读取整个XML文件。我只想有选择地读取特定节点。例如:如何只读取第一个Scenario节点的数据?然后,根据用户输入,只读取第二个Scenario节点的数据?然后,根据用户输入,只读取第一个场景节点的数据?或者只是第三个场景节点?

本质上,我问,因为XML没有'索引'如何指定要读取的节点的哪个实例?

2 个答案:

答案 0 :(得分:2)

首先,您需要将xml加载到XmlDocument中,然后您可以选择特定节点并迭代它们,如下所示:

XmlDocument xml = new XmlDocument();
xml.LoadXml("your xml"); 

XmlNodeList list = xml.SelectNodes("/ScenarioList/Scenario");
foreach (XmlNode xn in list)...

答案 1 :(得分:2)

您可以使用JXPath遍历节点。 如果需要评估相对于对象图中某个节点的多个路径,则可能需要创建相对的JXPathContext。

首先,获取应该作为相对上下文根的位置的指针。然后通过调用

获取相关上下文
 JXPathContext context = JXPathContext.newContext(bean);

 Pointer addressPtr = context.getPointer("/employees[1]/addresses[2]");

 JXPathContext relativeContext = 
              context.getRelativeContext(addressPtr);

 // Evaluate relative path 
 String zipCode = (String)relativeContext.getValue("zipCode");

 // Evaluate absolute path
 String name = (String)relativeContext.getValue("/employees[1]/name");

 // Use the parent axis to locate the employee for the current address
 Double salary = (Double)relativeContext.getValue("../salary");

您可以参考here

详细介绍