我有这个 HTML:
<tr class="even expanded first>
<td class="score-time status">
<a href="/matches/2012/08/02/europe/uefa-cup/">
16 : 00
</a>
</td>
</tr>
我想在没有额外空格的情况下提取 (16 : 00) 字符串。这可能吗?
我有这个 HTML:
<tr class="even expanded first>
<td class="score-time status">
<a href="/matches/2012/08/02/europe/uefa-cup/">
16 : 00
</a>
</td>
</tr>
我想在没有额外空格的情况下提取 (16 : 00) 字符串。这可能吗?
I. 使用这个单一的 XPath 表达式:
translate(normalize-space(/tr/td/a), ' ', '')
说明:
normalize-space()
从其参数生成一个新字符串,其中删除任何前导或尾随空格(空格、制表符、NL 或 CR 字符),并将任何中间空格替换为单个空格字符。
translate()
获取由 生成的结果normalize-space()
并生成一个新字符串,其中每个剩余的中间空格都被空字符串替换。
二、或者:
translate(/tr/td/a, ' 	 
', '')
请尝试以下 xpath 表达式:
//td[@class='score-time status']/a[normalize-space() = '16 : 00']
您可以使用 XPath 的normalize-space(),如//a[normalize-space()="16 : 00"]
当我遇到与上述类似的问题时,我遇到了这个线程。
HTML
<div class="d-flex">
<h4 class="flex-auto min-width-0 pr-2 pb-1 commit-title">
<a href="/nsomar/OAStackView/releases/tag/1.0.1">
1.0.1
</a>
XPath 启动命令
tree.xpath('//div[@class="d-flex"]/h4/a/text()')
然而,这抓住了随机空白并给了我以下输出:
['\n ', '\n 1.0.1\n ']
使用 normalize-space,它删除了第一个空白节点并给我留下了我想要的东西
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')
['\n 1.0.1\n ']
然后我可以抓取列表的第一个元素,并使用 strip() 删除任何进一步的空格
XPath 最终命令
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')[0].strip()
这让我得到了我所需要的:
1.0.1
您可以检查 text() 节点是否为空。
/path/text()[不是(.='')]
如果没有容器,它可能对像 follow-sibling:: 这样的轴有用,或者对 child:: 有用。
注意:一些评论说 xpath 不能进行字符串操作......即使它不是真的设计用于你可以做一些基本的事情:包含(),开始(),替换()。
如果你想检查空白节点,那就更难了,因为你通常会有一个节点列表结果集,而且大多数 xpath 函数,比如匹配或替换,只操作一个节点。
因此,您可以使用 xpath 检索容器或文本节点列表,然后使用另一种语言对其进行处理。(例如 java、php、python、perl)。