我正在寻找的例子。这是输入:
<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>
换句话说,从自我到祖父母的直线,只有那些节点。
答案 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是不够的。感谢所有回复的人。