gpt4 book ai didi

c# - XML SelectNodes then SelectSingleNodes - 只检索第一个

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:06 25 4
gpt4 key购买 nike

我有以下 XML

<root>
<Operations>
<OperationId>1</OperationId>
<OtherFields>...</OtherFields>
</Operations>
<Operations>
<OperationId>2</OperationId>
<OtherFields>...</OtherFields>
</Operations>
<Operations>
<OperationId>3</OperationId>
<OtherFields>...</OtherFields>
</Operations>
</root>

使用 C# 和 System.XML 命名空间,我使用此代码获得所有操作:

XmlNodeList operations= doc.SelectNodes("/root/Operations");

现在我需要遍历每个操作并引用字段(OperationId、OtherFields)。

我试试这个:

foreach (XmlNode node in xnodes)
{
Console.WriteLine("Operation ID: {0}", node.SelectNodes("//OperationId")[0].InnerText);
}

然而,这只是重复第一个 OperationId - 1。

怎么了?

谢谢,安德鲁

最佳答案

您的初始查询会像您期望的那样从根节点中选择所有 Operations 节点。但是,循环中的内部查询会做一些不同的事情。

通过使用 // 开始您的查询,您将查询相对于文档的根目录。因此,您实际上选择了文档中的所有 OperationId 节点,而不仅仅是当前节点的后代子节点。然后,您为每次迭代在该结果中索引第一个节点,这就是您看到第一个 id 重复的原因。

由于 node 指的是当前的 Operations 节点,要选择相应的 OperationId,您的查询应该是:

OperationId

我应该提到,由于您只是尝试选择查询的第一个元素,因此最好使用 SelectSingleNode() 而不是 SelectNodes。如果有任何节点被选中,第一个将被返回。

node.SelectSingleNode("OperationId").InnerText

但是,由于您只是试图选择直接子元素,因此我不会在那里使用 XPath 查询,这是没有必要的。只需使用索引器直接访问子元素。

var query = doc.SelectNodes("/root/Operations");
foreach (XmlNode node in query)
{
Console.WriteLine("Operation ID: {0}", node["OperationId"].InnerText);
}

关于c# - XML SelectNodes then SelectSingleNodes - 只检索第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18393333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com