如何使用xpath获取具有属性的父元素

时间:2017-06-01 15:28:54

标签: xpath xquery marklogic

我发布了示例XML和预期输出,有助于获得结果。

示例XML

<root>
  <A id="1">
    <B id="2"/>
    <C id="2"/>
  </A>
</root>

预期产出:

<A id="1"/>

3 个答案:

答案 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; =)