gpt4 book ai didi

python - Xpath 获取具有特定字符串的标签及其所有后续兄弟,直到另一个特定字符串在标签中

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

我对使用 Xpath 还很陌生。我正在尝试从法律法规网站中提取一些信息,现在我只想:

  1. 找到一个包含字符串“Article 1”的标签。
  2. 从 (1) 中的那个标签开始获取它以及之后的所有内容,直到其中一个标签在 <b> 中包含另一个字符串“PRIME Minister”标签。
<p>
<b> <span> Article 1. </span> </b>
<span>
To approve the master plan on development
of tourism in Northern Central Vietnam
with the following principal contents:
</span>
</p>

<p>
<span>
1. Development viewpoints
</span>
</p>

<p>
<span>To realize general viewpoints of the strategy for and master plan on development of Vietnam’s tourism through 2020.
</span>
</p>

<p>
<span>PRIME MINISTER: Nguyen Tan Dung</span>
</p>

<p>
<span>
<b> PRIME MINISTER </b>
</span>
</p>

<p>
<b> <span> Article 2. </span> </b>
<span>
.................
</span>
</p>

<p>
<span> PRIME MINISTER: Nguyen Tan Dung</span>
</p>

预期的输出,我应该有一个类似于

的列表
[ 
'Article 1.' ,
'To approve the master plan on development of tourism in Northern
Central Vietnam with the following principal contents: ',
'1. Development viewpoints' ,
'To realize general viewpoints of the strategy for and master plan on
development of Vietnam’s tourism through 2020.' ,
'PRIME MINISTER: Nguyen Tan Dung',
'PRIME MINISTER'
]

列表中的第一项是“第 1 条”。列表中的最后一项是 <b> 中的“PRIME MINISTER”标签

最佳答案

“直到”和“之间”查询在 XPath 中出奇地困难,即使是比 1.0 更高的 XPath 版本也是如此。

如果我们从更高版本回溯,在 XPath 3.1 中,您可以执行如下操作:

let $first := p[contains(., 'Article 1')],
$last := p[contains(., 'PRIME MINISTER']
return $first, p[. >> $first and . << $last], $last

在 XPath 2.0 中我们没有 let ,但是for效果一样好,只是读起来有点奇怪。

但是在 1.0 中 (a) 我们不能绑定(bind)变量,并且 (b) 我们没有 <<>>运营商,这使得它变得更加困难。

最简单的表达大概是

p[(.|preceding-sibling::p)[contains(., 'Article 1')] and 
(.|following-sibling::p)[contains(., 'PRIME MINISTER')]]

不幸的是,如果没有一个非常聪明的优化器,对于一个大的输入文档,这可能会非常低效(两个 contains() 测试都将执行大约 (N^2)/2 次,其中 N 是段落数)。如果您受限于 XPath 1.0,那么最好使用 XPath 来查找“开始”和“结束”节点,然后使用宿主语言来查找其间的所有节点。

关于python - Xpath 获取具有特定字符串的标签及其所有后续兄弟,直到另一个特定字符串在标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56518165/

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