XPATH选择除特定元素元素上的一个属性之外的所有属性attr
我选择了所有属性id,一切都进行得很顺利,然后有一天需求发生了变化,现在我必须选择除一个之外的所有属性 给出以下示例:XPATH选择除特定元素元素上的一个属性之外的所有属性attr,xpath,Xpath,我选择了所有属性id,一切都进行得很顺利,然后有一天需求发生了变化,现在我必须选择除一个之外的所有属性 给出以下示例: <root> <structs id="123"> <struct> <comp> <data id="asd"/> </comp> </struct> </structs> </root>
<root>
<structs id="123">
<struct>
<comp>
<data id="asd"/>
</comp>
</struct>
</structs>
</root>
我想选择除/root/structs/struct/comp/data之外的所有属性id
请注意,Xml可能不同。
这意味着,我真正想要的是:给定任何Xml树,我想要选择除元素/root/structs/struct/comp/data上的属性id之外的所有属性id
我尝试了以下方法:
//@id[notancestor::struct]它有点工作,但我想提供一个到祖先轴的完整xpath,但我做不到
//@id[notcontainsname,'data']它不起作用,因为名称选择器返回基础节点的名称,该节点是属性而不是其父元素。以下内容应符合您的描述:
//@id[not(parent::data/parent::comp/parent::struct/parent::structs/parent::root)]
如您所见,它只是从下到上检查id属性的父级是否与路径root/structs/struct/comp/data匹配
我认为这应该足以满足您的需要,但它不能100%确保父级位于路径/root/structs/struct/comp/data,因为它可能位于路径/someOtherHigherRoot/root/structs/struct/comp/data。我猜在您的XML结构中不可能出现这种情况,但如果必须检查这种情况,您可以这样做:
//@id[not(parent::data/parent::comp/parent::struct/parent::structs/parent::root[not(parent::*)])]
根始终是根Xml元素,非常感谢您的回答!我将测试不同的案例,然后在这里报告