2

こんにちはこれができるかどうかはわかりませんが、ここの誰かが知っているでしょう:)

使用して

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

次の2番目からEquipを選択するにはどうすればよいですか:

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

常にリース 2 が<Item>あり、値を取得したいノードは常に 2 番目になります。<Item>

これは .Net 4.0 を使用した WPF アプリです

4

4 に答える 4

3

次の XPath 式を試してください。

//ItemAry/Item[2]/Equip

2 番目の<Item>要素のみを考慮します。

于 2012-11-27T10:00:52.190 に答える
1

使用:

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

現在選択されている回答は、手元にある特定の XML ドキュメントによっては、予期しない結果をもたらす可能性があります

//ItemAry/Item[2]/Equip

親の 2 番目の子であるすべての要素の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>

上記の間違っている可能性のある式は、2 つの要素を選択します。

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

この回答で提供されている正しい表現:

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

だけを選択します:

<Equip>xxx</Equip>
于 2012-11-27T14:18:14.930 に答える
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 に答える
0

あなたがノードの位置について確信しているなら、あなたはあなたの:でposition()関数を使うことができますXPath

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