2017-06-01 335 views

回答

0

的是,你在找什么?

//*[@id='1']/parent::*,类似//*[@id='1']/../,如果你想验证父

是根:

//*[@id='1']/parent::root 

https://en.wikipedia.org/wiki/XPath ,如果你需要的不只是父母 - 但也有一些属性的一个元素:了解轴符并使用Axis“ancestor ::”=)

+0

您能否提供我期望的结果()..谢谢.. – Antony

3

你可以用几种方式制定这个查询:

  • 具有匹配属性查找元素,只有上升的所有时间:

    //*[@id=1] 
    
  • 找到属性,则上升了一步:

    //@id[.=1]/.. 
    
  • 使用fn:id($id)功能,给该文件被验证并且ID属性被如此定义:

    /id('1') 
    
+0

您能否提供我期望的结果()..谢谢.. – Antony

+0

您无法得到您要求的确切结果,因为所有XML元素都必须被关闭。所以最好你可以得到''。看来我(和其他人)错误地理解了这个问题。关于如何选择结果的规则是什么? –

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>

+0

这个答案解决了我认为是有意的问题,但是可能不会推广。也许第二行应该是'for $ el in $ doc // * [@ id =“1”] return element {fn:node-name($ el)} {$ el/@ *}' – BenW