用于删除空白的xpath表达式
我有这个HTML:用于删除空白的xpath表达式,xpath,Xpath,我有这个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的字符串,不需要额外的空格。这
<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的字符串,不需要额外的空格。这可能吗
可以检查文本节点是否为空
/路径/文本[非=]
如果这些轴没有容器,它可能对以下轴很有用:同级轴::,或者子轴::
您可以使用字符串或XPath2的正则表达式函数。
注意:一些评论说xpath不能进行字符串操作。。。即使它不是专门为它设计的,你也可以做一些基本的事情:包含,开始,替换
如果您想检查空白节点,这要困难得多,因为您通常会有一个nodelist结果集,而大多数xpath函数(如match或replace)只操作一个节点
您可以分离节点和字符串操作
因此,您可以使用xpath检索容器或文本节点列表,然后用另一种语言对其进行处理。例如java、php、python、perl。I.使用以下单个XPath表达式:
说明:
从其参数生成一个新字符串,其中删除任何前导或尾随空格、制表符、NL或CR字符,并用单个空格字符替换任何中间空格
获取由normalize space生成的结果,并生成一个新字符串,其中剩余的每个中间空间都将替换为空字符串
二,。或者:
请尝试以下xpath表达式:
//td[@class='score-time status']/a[normalize-space() = '16 : 00']
我遇到这个线程时,我有我自己的问题类似于上述 HTML 然而,这抓住了随机空白,并给了我以下输出:
['\n ', '\n 1.0.1\n ']
使用normalizespace,它删除了第一个空白节点,并留给我想要的东西
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
您可以使用//a[normalize space=16:00]中的XPath,使用什么实现-PHP,或者什么?XPath关注的是节点的检索,而不是字符串处理。任何删除空白的操作都需要在检索后单独完成。我认为有一个表达式可以在没有空格的情况下获得所需的文本。如果我们讨论的是php,我认为这是关于html的,那么可以在DOMDocument对象上将preseveWhiteSpace设置为false,从而自动删除多余的空白。正如我所说,XPath不是字符串处理机制;它不能删除空格。它只涉及数据的检索。您要对该数据执行的任何操作都必须单独执行,目前我们不知道您使用的是哪种语言。@Utkanos:关于XPath的字符串处理功能的绝对陈述被证明是错误的-根据我的回答:是否存在通过XML文件仅获取CDATA节点的最短XPATH表达式?@ArupRakshit,XPATH数据模型中没有CDATA节点,因此无法将CDATA区分为包含它的文本节点的一部分。与不可能知道短标记是否用于没有子元素的元素,或者是否在属性值周围使用引号或撇号作为分隔符相同。@DimitreNovatchev感谢您的回答。这意味着,我需要找到它,我搜索常规节点。@ArupRakshit,是的,在XPath中只能选择全文节点。如果您知道更像是要查找的文本的子字符串,则可以使用谓词过滤这些节点
['\n ', '\n 1.0.1\n ']
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')
['\n 1.0.1\n ']
tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')[0].strip()
1.0.1