Xml xpath选择所有父级和所有子级
我需要编写两个xpath查询,其中一个选择特定元素的所有父元素,从元素的直接父元素到根元素,然后我将能够选择元素的某些特定属性 另一个选择元素的所有子元素,无论它们位于何处 例如,如果xml文档类似于:Xml xpath选择所有父级和所有子级,xml,xslt,xpath,Xml,Xslt,Xpath,我需要编写两个xpath查询,其中一个选择特定元素的所有父元素,从元素的直接父元素到根元素,然后我将能够选择元素的某些特定属性 另一个选择元素的所有子元素,无论它们位于何处 例如,如果xml文档类似于: <role key='total-admin'> <role key='security-admin'> <role key='users-admin'> <role key='add-user'>&
<role key='total-admin'>
<role key='security-admin'>
<role key='users-admin'>
<role key='add-user'></role>
<role key='delete-user'></role>
<role key='deactivate-user'></role>
</role>
</role>
</role>
[ 'users-admin' , 'security-admin' , 'total-admin' ]
[ 'users-admin' , 'add-user' , 'delete-user' , 'deactivate-user' ]
对于第一个查询,请使用:
//role[@key = 'add-user']/ancestor::*
第二项:
//role[@key = 'security-admin']//*
您始终有一个上下文节点,定义为具有特定属性值的元素,例如
“添加用户”
或“安全管理”
:
由于这为您提供了一个节点集,因此上下文节点的表达式需要排除此类类型的所有非单个元素:
//*[@key = "string" and count(//*[@key = "string"]) = 1]
这就解决了对上下文节点的需求。然后,您可以使用
表示该contextnode,也可以逐字写入其中
选择上下文元素(即祖先轴)的所有父母、祖父母、外祖父母等:
选择所有子对象(即子体轴):
//*[@key = "string" and count(//*[@key = "string"]) = 1]
./ancestor::*
//*[@key = "string" and count(//*[@key = "string"]) = 1]/ancestor::*
./descendant::*
.//*
//*[@key = "string" and count(//*[@key = "string"]) = 1]/descendant::*
//*[@key = "string" and count(//*[@key = "string"]) = 1]//*