用于删除空白的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> 可以检查text()节点是否为空 /路径/文本
<tr class="even expanded first>
<td class="score-time status">
<a href="/matches/2012/08/02/europe/uefa-cup/">
16 : 00
</a>
</td>
</tr>
- 可以检查text()节点是否为空
/路径/文本()
如果这些轴没有容器,它可能对以下轴很有用:同级轴::,或者子轴::
- 可以使用xpath 2的string()或regex()函数
注意:一些评论说xpath不能进行字符串操作。。。即使它不是专门为它设计的,您也可以做一些基本的事情:contains()、start-with()、replace()
如果您想检查空白节点,这要困难得多,因为您通常会有一个nodelist结果集,而大多数xpath函数(如match或replace)只操作一个节点
- 您可以分离节点和字符串操作
因此,您可以使用xpath检索容器或文本节点列表,然后用另一种语言对其进行处理。(例如java、php、python、perl)。I.使用这个XPath表达式:
translate(normalize-space(/tr/td/a), ' ', '')
translate(/tr/td/a, ' 	 
', '')
说明:
translate(normalize-space(/tr/td/a), ' ', '')
translate(/tr/td/a, ' 	 
', '')
从其参数生成一个新字符串,其中删除任何前导或尾随空格(空格、制表符、NL或CR字符),并用单个空格字符替换任何中间空格
获取由normalize-space()
生成的结果,并生成一个新字符串,其中剩余的每个中间空格都被空字符串替换
II。或者:
translate(normalize-space(/tr/td/a), ' ', '')
translate(/tr/td/a, ' 	 
', '')
请尝试以下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
您可以像[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中只能选择全文节点。如果您对要查找的文本了解更多(如子字符串),则可以使用谓词筛选这些节点