gpt4 book ai didi

xpath - 使用一个xpath表达式从同级中捕获文本

转载 作者:行者123 更新时间:2023-12-03 17:26:32 25 4
gpt4 key购买 nike

假设我有包含此类内容的HTML,并且我想忽略带有divclass=log,除非在带有divclass=ts之前,在这种情况下,我希望捕获同级的文本内容div在某些数据结构中。

一个人可以这样做吗?

<div class='log'>start</div>
<div class='ts'>2017-03-14</div><div class='log'>note 1</div>
<div class='ts'>2017-03-15</div><div class='log'>note 2</div>
<div class='log'>start</div>

最佳答案

以下XPath返回带有divclass='log',紧接在div之后的class='ts'

//div[@class='log' and preceding-sibling::node()[1][self::div/@class='ts']]


我将分解可能令人困惑的部分:


preceding-sibling::node()[1]:获取直接位于当前上下文元素之前的任何类型的节点(文本,元素,注释等)
[self::div/@class='ts']:验证该节点是一个 div且其 class属性等于'ts'


从这里开始,您将需要合并主机编程语言以继续获得所需的结果,例如,在python中使用 lxml

>>> raw = '''<div>
... <div class='log'>start</div>
... <div class='ts'>2017-03-14</div><div class='log'>note 1</div>
... <div class='ts'>2017-03-15</div><div class='log'>note 2</div>
... <div class='log'>start</div>
... </div>'''
>>> from lxml import html
>>> root = html.fromstring(raw)
>>> query = "//div[@class='log' and preceding-sibling::node()[1][self::div/@class='ts']]"
>>> [[d.getprevious().text, d.text] for d in root.xpath(query)]
[['2017-03-14', 'note 1'], ['2017-03-15', 'note 2']]




以下是根据要求返回 ['2017-03-14', 'note 1','2017-03-15', 'note 2']的XPath:

//div[
(@class='log' and preceding-sibling::node()[1][self::div/@class='ts'])
or
(@class='ts' and following-sibling::node()[1][self::div/@class='log'])
]/text()

关于xpath - 使用一个xpath表达式从同级中捕获文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019134/

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