gpt4 book ai didi

xpath - 根据上一个和下一个兄弟提取文本

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

我正在尝试从以下结构中提取数据:

<span>Heading</span>
<br />
<br />
<span>Heading1</span>
<br />
data#1
<br />
<br />
<span>Heading4</span><br />
&acirc;&euro;&cent; data#4.1
<br />
&acirc;&euro;&cent; data#4.2
<br />
&acirc;&euro;&cent; data#4.3
<br />
&acirc;&euro;&cent; data#4.4
<br />
<br />
<span>Heading5</span>
<br />
&acirc;&euro;&cent; data#5.1
<br />
&acirc;&euro;&cent; data#5.2
<br />
&acirc;&euro;&cent; data#5.3
<br />
<br />

我可以使用这样的方法提取数据#1:

span[text()='Heading1']/following-sibling::br[1]/following::text()[1]

但我不知道如何提取 Heading4 下的数据。我需要提取 data#4.1data#4.2data#4.3data#4.4。点数不固定,可以变化。

最佳答案

这个 XPath 1.0 表达式准确地选择了想要的节点:

  /*/span[.='Heading4']
/following-sibling::text()
[count(.|/*/span[.='Heading5']/preceding-sibling::text())
=
count(/*/span[.='Heading5']/preceding-sibling::text())
]
[normalize-space()]

它由著名的 Kayessian 方法生成,用于求交两个节点集 $ns1$ns2:

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

如果在 Kayessian 公式中我们将 $ns1 替换为:

,我们将获得上面的第一个表达式:
  /*/span[.='Heading4']/following-sibling::text()

$ns2:

  /*/span[.='Heading5']/preceding-sibling::text()

最终谓词 [normalize-space()] 从该交集中过滤掉纯空白文本节点。

基于 XSLT 的验证:

<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=
"/*/span[.='Heading4']
/following-sibling::text()
[count(.|/*/span[.='Heading5']/preceding-sibling::text())
=
count(/*/span[.='Heading5']/preceding-sibling::text())
]
[normalize-space()]
"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时(实体被替换——因为我们没有可用的 DTD 定义它们,这在这里不是必需的):

<html>
<span>Heading</span>
<br />
<br />
<span>Heading1</span>
<br /> data#1
<br />
<br />
<span>Heading4</span>
<br /> #acirc;#euro;#cent; data#4.1
<br /> #acirc;#euro;#cent; data#4.2
<br /> #acirc;#euro;#cent; data#4.3
<br /> #acirc;#euro;#cent; data#4.4
<br />
<br />
<span>Heading5</span>
<br /> #acirc;#euro;#cent; data#5.1
<br /> #acirc;#euro;#cent; data#5.2
<br /> #acirc;#euro;#cent; data#5.3
<br />
<br />
</html>

对 Xpath 表达式求值并将该求值结果复制到输出:

 #acirc;#euro;#cent; data#4.1 
#acirc;#euro;#cent; data#4.2
#acirc;#euro;#cent; data#4.3
#acirc;#euro;#cent; data#4.4

关于xpath - 根据上一个和下一个兄弟提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719583/

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