gpt4 book ai didi

xpath - 如何在单独的树中返回节点的xpath并集?

转载 作者:行者123 更新时间:2023-12-03 17:03:56 25 4
gpt4 key购买 nike

这是一个基本问题,但我找不到任何答案。

<a>
<b1>
<d1>D1</d1>
<e1>E1</e1>
</b1>
<b2>
<c2>
<d2>D2</d2>
<e2>E2</e2>
</c2>
</b2>
</a>


从以上我想返回:

<a>    
<d1>D1</d1>
<e1>E1</e1>
<d2>D2</d2>
<e2>E2</e2>
</a>


并不是:

<a>
<b1>
<d1>D1</d1>
<e1>E1</e1>
</b1>
<b2>
<d2>D2</d2>
<e2>E2</e2>
</b2>
</a>


如果那有意义的话。我尝试了“ / a”,但这给了我:

<a>
<b1>
<d1>D1</d1>
<e1>E1</e1>
</b1>
<b2>
<c2>D2E2</c2>
</b2>
</a>

最佳答案

如果要选择所有离开节点(没有子节点的节点),则可以尝试以下XPath:

//*[not(*)]


或使用XPath联合( |)获得 <b1><c2>的子节点:

(//b1/* | //c2/*)


给定您发布的示例XML,以上两个XPath都将返回:

<d1>D1</d1>
<e1>E1</e1>
<d2>D2</d2>
<e2>E2</e2>


但是,如果您真的需要将结果包装在 <a>中,那么我同意@minopret注释,这不是XPath要做的。 XSLT是将XML转换为不同格式的更合适的方法。

更新:

为了回应您的最后评论,XPath中没有这样的分组。如果需要该数据结构,应使用宿主语言完成。最好的选择是在XPath中选择所需节点的父节点,以便按其父节点对它们进行分组。然后,您可以使用宿主语言进行进一步处理,例如:

//*[not(*)]/parent::*
//*[*[not(*)]]


以上两个XPath查询中的任何一个都可以返回:

<b1>
<d1>D1</d1>
<e1>E1</e1>
</b1>
<c2>
<d2>D2</d2>
<e2>E2</e2>
</c2>

关于xpath - 如何在单独的树中返回节点的xpath并集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com