需要XPath来返回节点集(祖父母[没有叔叔] +父亲[没有兄弟姐妹] +自我

时间:2009-10-02 14:16:00

标签: xml xpath

我正在寻找的例子。这是输入:

<AAA>
  <BBB id='1'>
    <CCC  id='1'>
       <DDD  id='1'/>
       <DDD  id='2'/> 
    </CCC>
    <CCC id='2'>
       <DDD  id='3'/>
       <DDD  id='4'/> 
    </CCC>
  </BBB>
  <BBB id='2'>
    <CCC  id='3'>
       <DDD  id='5'/>
       <DDD  id='6'/> 
    </CCC>
    <CCC id='4'>
       <DDD  id='7'/>
       <DDD  id='8'/> 
    </CCC>
  </BBB>
</AAA>

以下是我想要选择的节点集(ID为1的DDD,它的父节点和祖父节点):

  <BBB id='1'>
    <CCC  id='1'>
       <DDD  id='1'/>
    </CCC>
  </BBB>

换句话说,从自我到祖父母的直线,只有那些节点。

4 个答案:

答案 0 :(得分:1)

任何XPath表达式的结果都是单个节点或节点列表;您将无法单独使用XPath获得树结构。

但是,您可以选择所请求的节点:您只需获取它们的列表而不是层次结构。

这是一个简单的XPath,可以实现这一目标:

//DDD[@id = '1'] | //DDD[@id = '1']/.. | //DDD[@id = '1']/../..

请注意,使用//路径可能会影响性能。您可能希望将//扩展为/AAA/BBB/CCC/

如果您想要解决这个问题,可以使用我的在线工具here在任意XML上运行XPath表达式。

祝你好运!

答案 1 :(得分:0)

AAA\BBB[CCC\DDD\@id = '1']

答案 2 :(得分:0)

假设起点是DDD @id = 1

. | parent::CCC | ancestor::BBB

返回包含DDD及其父级和祖父级的节点集。

答案 3 :(得分:0)

我现在认为我的问题没有意义。实际上,我正试图用一个XPath解决文档构建问题 - XPath是不够的。感谢所有回复的人。