gpt4 book ai didi

python - 使用 Xpath 选择所有 dd 标签,直到新的 dl 标签

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:38 26 4
gpt4 key购买 nike

我是 Scrapy 和 Xpath 的初学者,我正在寻找解析具有以下结构的网站

<dl class="ismSummary ismHomeSummary">
<dt>cat1</dt>
<dd>value1</dd>
<dd>value2</dd>
<dt>cat2</dt>
<dd>value1</dd>
<dd>value2</dd>
</dl>

使用 Xpath 我只想获取 cat1 的 value1 和 value2(dd 的)

这是我现在拥有的

//dt[text()="cat1"]/following-sibling::dd

问题是它不会在 cat2 处停止并继续从 cat2 选择 value1 和 value2。 :(

最佳答案

使用:

//dt[. = 'cat1']
/following-sibling::dd
[count(.| //dt[. = 'cat2']/preceding-sibling::dd)
=
count(//dt[. = 'cat2']/preceding-sibling::dd)
]

提供 //dt[. = 'cat1']//dt[. = 'cat2'] 每个只选择一个元素,上面的表达式恰好选择了想要的两个 dd 元素。

基于 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=
"//dt[. = 'cat1']
/following-sibling::dd
[count(.| //dt[. = 'cat2']/preceding-sibling::dd)
=
count(//dt[. = 'cat2']/preceding-sibling::dd)
]

"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时(最后两个 dd 的值已修改,因此我们可以确定选择了所需的元素) :

<dl class="ismSummary ismHomeSummary">
<dt>cat1</dt>
<dd>value1</dd>
<dd>value2</dd>
<dt>cat2</dt>
<dd>value3</dd>
<dd>value4</dd>
</dl>

计算 XPath 表达式并将其选择的节点复制到输出:

<dd>value1</dd>
<dd>value2</dd>

解释:

这里我们在 XPath 1.0 中使用 Kayessian 方法求节点集交集:

两个节点集的交集:$ns1$ns2:

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

在我们的例子中,我们将 $ns1 替换为:

//dt[. = 'cat1']/following-sibling::dd

我们将 $ns2 替换为:

//dt[. = 'cat2']/preceding-sibling::dd

关于python - 使用 Xpath 选择所有 dd 标签,直到新的 dl 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10770699/

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