嗨不确定是否可以这样做,但我知道有人会知道:)
使用
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应用程序
答案 0 :(得分:3)
试试这个XPath表达式:
//ItemAry/Item[2]/Equip
它仅考虑第二个<Item>
元素。
答案 1 :(得分:1)
您可以使用Linq to Xml轻松完成:
XDocument xdoc = XDocument.Load(path_to_xml);
var second = (string)xdoc.Descendants("Item").Skip(1).Element("Equip");
答案 2 :(得分:1)
使用强>:
(/*/ItemAry/Item)[2]/Equip
当前选择的答案可能会产生意外结果,具体取决于手头的特定XML文档:
//ItemAry/Item[2]/Equip
选择所有 Equip
元素的Item
子元素,这些元素是其Item
父级的第二个ItemAry
子元素。
因此,如果源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>
答案 3 :(得分:0)
如果您确定节点的位置,可以在XPath
中使用position()
function:
XElement oNodeEquip = xmlDoc.XPathSelectElement("//ItemAry/Item[position()=2]/Equip");