我发布了示例XML和预期输出,有助于获得结果。
示例XML
<root>
<A id="1">
<B id="2"/>
<C id="2"/>
</A>
</root>
预期产出:
<A id="1"/>
答案 0 :(得分:3)
您可以通过多种方式制定此查询:
查找具有匹配属性的元素,仅始终提升:
//*[@id=1]
找到属性,然后提升一步:
//@id[.=1]/..
使用fn:id($id)
函数,因为文档已经过验证,ID属性定义如下:
/id('1')
答案 1 :(得分:2)
我认为你不可能追求的是什么。没有孩子使用XPATH就无法选择一个节点(这意味着它总是会返回你的情况下的节点B和C)
您可以使用XQuery实现这一点,我不确定这是否是您想要的,但这里是一个示例,您可以根据存储在其中的现有节点创建新节点。 $doc
变量。
declare variable $doc := <root><A id="1"><B id="2"/><C id="2"/></A></root>;
element {fn:node-name($doc/*)} {$doc/*/@*}
上述内容会返回<A id="1"></A>
。
答案 2 :(得分:0)
是你在寻找什么?
//*[@id='1']/parent::*
,类似于//*[@id='1']/../
如果要验证父项是否为root:
//*[@id='1']/parent::root
https://en.wikipedia.org/wiki/XPath 如果你不需要只是父 - 但前面的元素有一些属性:阅读Axis说明符并使用Axis&#34; ancestor ::&#34; =)