gpt4 book ai didi

xpath - 如何使用 XPATH 找到两个 H3 之间的所有节点?

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

如何使用 XPATH 找到两个 H3 之间的所有节点?

最佳答案

在 XPath 1.0 中,实现此目的的一种方法是使用 Kayessian 方法进行节点集交集:

$ns1[count(.|$ns2) = count($ns2)]

以上表达式精确选择属于节点集 $ns1 和节点集 $ns2 的节点。

要将其应用于特定问题 - 假设我们需要选择以下 XML 文档中第二个和第三个 h3 元素之间的所有节点:

<html>
<h3>Title T31</h3>
<a31/>
<b31/>
<h3>Title T32</h3>
<a32/>
<b32/>
<h3>Title T33</h3>
<a33/>
<b33/>
<h3>Title T34</h3>
<a34/>
<b34/>
<h3>Title T35</h3>
</html>

我们必须将 $ns1 替换为:

/*/h3[2]/following-sibling::node()

并将 $ns2 替换为:

/*/h3[3]/preceding-sibling::node()

因此,完整的 XPath 表达式为:

/*/h3[2]/following-sibling::node()
[count(.|/*/h3[3]/preceding-sibling::node())
=
count(/*/h3[3]/preceding-sibling::node())
]

我们可以验证这是否是正确的 XPath 表达式:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/">
<xsl:copy-of select=
"/*/h3[2]/following-sibling::node()
[count(.|/*/h3[3]/preceding-sibling::node())
=
count(/*/h3[3]/preceding-sibling::node())
]
"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于上面提供的 XML 文档时,就会生成所需的正确结果:

<a32/>

<b32/>
<小时/>

二. XPath 2.0解决方案:

使用相交运算符:

   /*/h3[2]/following-sibling::node()
intersect
/*/h3[3]/preceding-sibling::node()

关于xpath - 如何使用 XPATH 找到两个 H3 之间的所有节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835601/

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