所以,我在XElement
文件中有Xml
,看起来像这样:
... More parent nodes
<item cid="0x14c8" name="A" id="0xaf4b6f8">
<item cid="0x57c" luid="2001"/>
<item cid="0x578" luid="2000" value="0"/>
<item cid="0x14fa" name="B">
<item cid="0x57a" luid="2024" value="1.00"/>
<item cid="0x579" luid="2025" value="0"/>
<item link="0xb199640" cid="0x474" luid="5372"/>
...More descendants
</item>
现在,我想使用IEnumerable<Element>
link
的元素的XPath
个对象
在我的query
中,我正在做:
return currentXElement.XPathSelectElements("//item[@link]").Select(item => new Element(item));
但它会返回完整文档中的所有元素,而不是currentXElement
,这是我尝试查询的部分。
我该怎么办?我也试过使用/item[@link]
,但没有返回任何内容。
由于
修改:
最后,正如谢尔盖所说,
return currentXElement.Descendants("item").Where(i => i.Attribute("link") != null).Select(item => new IpjItem(item));
答案 0 :(得分:1)
//item
表达式选择项目元素,无论它们在文档中的位置。如果要选择与当前元素相关的项,则应使用完整路径。 E.g。
xdoc.Root.XPathSelectElements("//item[@name='B']//item[@link]")
这里我假设//item[@name='B']
选择你的currentElement
(你应该使用选择你当前元素的表达式),然后用//item[@link]
你正在搜索相对于名字的项目的后代项目B
。
注意:我认为纯LINQ在这里会更好
currentXElement.Descendants("item").Where(i => i.Attribute("link") != null)