2

嗨 不知道这是否可以做到,但我知道这里有人会知道 :)

使用

XElement oNodeEquip = xmlDoc.XPathSelectElement("//ItemAry/Item/Equip");

我将如何从以下第二个中选择装备:

<TestInfo>
  <ItemAry>
    <Item>
      <testData>ABC</testData>
    </Item>
    <Item>
      <testData>XYZ</testData>
      <Equip>xxx</Equip>
    </Item>
  </ItemAry>
</TestInfo>

总会有至少 2<Item>并且我想要的值的节点总是在第二个<Item>

这是一个使用 .Net 4.0 的 WPF 应用程序

4

4 回答 4

3

试试这个 XPath 表达式:

//ItemAry/Item[2]/Equip

它只考虑第二个<Item>元素。

于 2012-11-27T10:00:52.190 回答
1

您可以使用 Linq to Xml 轻松完成:

XDocument xdoc = XDocument.Load(path_to_xml);
var second = (string)xdoc.Descendants("Item").Skip(1).Element("Equip");
于 2012-11-27T09:59:32.310 回答
1

使用

(/*/ItemAry/Item)[2]/Equip

当前选择的答案可能会产生意想不到的结果,具体取决于手头的特定 XML 文档

//ItemAry/Item[2]/Equip

选择作为其父元素的第二个子元素Equip所有元素的子元素。 ItemItemItemAry

因此,如果源 XML 文档是

<TestInfo>
  <ItemAry>
    <Item>
      <testData>ABC</testData>
    </Item>
    <Item>
      <testData>XYZ</testData>
      <Equip>xxx</Equip>
    </Item>
  </ItemAry>
  <ItemAry>
    <Item>
      <testData>DEF</testData>
    </Item>
    <Item>
      <testData>TUW</testData>
      <Equip>yyy</Equip>
    </Item>
  </ItemAry>
</TestInfo>

上述可能错误的表达式选择了两个元素

<Equip>xxx</Equip>
<Equip>yyy</Equip>

此答案中提供的正确表达式

(/*/ItemAry/Item)[2]/Equip

只选择:

<Equip>xxx</Equip>
于 2012-11-27T14:18:14.930 回答
0

如果您确定节点的位置,您可以使用以下position()函数XPath

XElement oNodeEquip = xmlDoc.XPathSelectElement("//ItemAry/Item[position()=2]/Equip");
于 2012-11-27T10:09:34.917 回答