我需要帮助使用 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));
任何想法将不胜感激......
干杯 弥敦道
最佳答案
将一个添加到 XPath 表达式列表,没有节点集并集:
//Menu/Item[../MenuId != 2905 or ItemType = 'content']
含义:从任何 Menu
元素,Item
子元素的同级 MenuId
不等于 2905
或等于 'content'
ItemType
子级
关于.net - 如何使用 xpath 谓词排除满足条件的节点以外的所有节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894824/