我有这个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)字符串。这可能吗?
答案 0 :(得分:116)
<强>予。使用此单个XPath表达式:
translate(normalize-space(/tr/td/a), ' ', '')
<强>解释强>:
normalize-space()
从其参数生成一个新字符串,其中删除任何前导或尾随空格(空格,制表符,NL或CR字符)以及任何中介空格由单个空格字符替换。
translate()
获取normalize-space()
生成的结果,并生成一个新字符串,其中每个剩余的中间空格都被空字符串替换。
<强> II。可替代地强>:
translate(/tr/td/a, ' 	 
', '')
答案 1 :(得分:19)
请尝试以下xpath表达式:
Comparator.comparing(Demo2::getI)
答案 2 :(得分:4)
您可以像在//a[normalize-space()="16 : 00"]
中一样使用XPath的normalize-space()
答案 3 :(得分:2)
您可以检查text()节点是否为空。
/路径/文本()[不(= '')]
对于跟随兄弟的轴::如果它们不是容器,或者带有子::。
注意:有些评论说xpath不能进行字符串操作......即使它没有真正为你设计,你可以做基本的事情:contains(),starts-with(),replace()。
如果你想检查空白节点,那就更难了,因为你通常会有一个nodelist结果集,而大多数xpath函数,比如match或replace,只能运行一个节点。
因此,您可以使用xpath检索容器或文本节点列表,然后使用其他语言处理它。 (例如,java,php,python,perl)。
答案 4 :(得分:1)
遇到类似上面的问题时,我遇到了这个线程。
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
答案 5 :(得分:-15)
使用xpath-expressen获取标签的内部内容,然后使用 trim()(假设您正在使用php)或一些等效函数来删除开头或结尾处的任何空格