gpt4 book ai didi

java - 如何使用 XPath 按特定顺序选择元素

转载 作者:行者123 更新时间:2023-12-02 14:16:00 26 4
gpt4 key购买 nike

我有一个 XML 文件,其中节点 (Z) 包含随机顺序的子节点(H、W、P):

<X>
<Y>
<Z>
<H>Hello</H>
<W>World</W>
<P>!</P>
</Z>
<Z>
<P>!</P>
<W>World</W>
<H>Hello</H>
</Z>
</Y>
</X>

我想按给定的顺序选择子节点的内容。

我绑了这个:

/X/Y/Z/*[self::H or self::W or self::P]/text()

但这会保持错误的顺序:

Hello World !
! World Hello

我需要某种方法来选择序列中相对于 H 的 W 和 P。我怎样才能做到这一点?

我尝试过这个:

/X/Y/Z/(H,W,P)/text()

但是顺序还是错误。

编辑:这些问题表明我只需要文本部分,但我需要节点而不仅仅是文本。原因是 XPath text() 函数似乎对 CDATA 部分有问题。

最佳答案

对于 XPath 2:

使用/选择节点将始终按文档顺序返回节点,无论您如何编写。

但是,如果您选择原子值而不是节点,它将保持顺序:

/X/Y/Z/concat(H,W,P)

您还可以使用 for-in-return ,它永远不会改变顺序:

for $z in /X/Y/Z return ($z/H,$z/W,$z/P)

对于 XPath 3:

在真正的现代实现中,您还可以使用!而不是/,它也将始终保持顺序,并且在其他方​​面与/相同(并且它也会保留重复项):

 /X/Y/Z ! (H,W,P) ! text()

关于java - 如何使用 XPath 按特定顺序选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341811/

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