如何使用 xpath 谓词排除除满足条件的节点之外的所有节点?
我需要帮助使用 xpath 从 xml 节点列表中排除特定节点。 xml结构如下。 xml文件很大,大约有8000项,其中大部分是子菜单类型。
<Menu>
<MenuId>2905</MenuId>
<Item>
<ItemId>191916</ItemId>
<ItemType>content</ItemType>
</Item>
<Item>
<ItemId>17343</ItemId>
<ItemType>submenu</ItemType>
<Menu>
...
</Menu>
</Item>
</Menu>
我需要做的是对于某个 MenuID(例如 2905)排除所有子节点,除了那些 ItemType = 'content'
我认为下面可以工作的子节点?
Menu[MenuId !='2905' or MenuId = '2905' and child::ItemType = 'content']/Item
难道不应该选择不在 2905 中的所有节点以及在 2905 中且属于内容类型的节点吗?我尝试过的 .NET 用法如下:
XmlNodeList nextLevelNodeList = currentNode.SelectNodes(string.Format("Menu[MenuId !='2905' or MenuId = '2905' and child::ItemType = 'content']/Item));
任何想法将不胜感激......
干杯 内森
I need help using xpath to exclude particular nodes from an xml node list. The xml structure is below. The xml file is large, around 8000 items, the majority of which are submenu type.
<Menu>
<MenuId>2905</MenuId>
<Item>
<ItemId>191916</ItemId>
<ItemType>content</ItemType>
</Item>
<Item>
<ItemId>17343</ItemId>
<ItemType>submenu</ItemType>
<Menu>
...
</Menu>
</Item>
</Menu>
What I need to do is for a certain MenuID (2905, for example) exclude all child nodes except those where ItemType = 'content'
I thought the below would work?
Menu[MenuId !='2905' or MenuId = '2905' and child::ItemType = 'content']/Item
Shouldn't that select all nodes that are not in 2905 and any that are in 2905 and of the content type? The .NET usage I've tried is below:
XmlNodeList nextLevelNodeList = currentNode.SelectNodes(string.Format("Menu[MenuId !='2905' or MenuId = '2905' and child::ItemType = 'content']/Item));
Any ideas would be greatly appreciated...
cheers
Nathan
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将一个添加到 XPath 表达式列表中,无需节点集联合:
含义:来自任何
Menu
元素,Item
子元素具有同级MenuId 不等于
2905
或ItemType
子项等于'content'
Adding one to the list of XPath expressions, without node set union:
Meaning: from any
Menu
element, theItem
child having a siblingMenuId
not equal to2905
or aItemType
child equal to'content'
之前的两个答案都不正确。
使用(来自
Menu
元素的父元素):Both previous answers are incorrect.
Use (from the parent of the
Menu
elements):合并两个节点列表:
并且
Combine two node lists:
And