Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于删除空白的xpath表达式_Xpath - Fatal编程技术网

用于删除空白的xpath表达式

用于删除空白的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的字符串,不需要额外的空格。这

我有这个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的字符串,不需要额外的空格。这可能吗

可以检查文本节点是否为空

/路径/文本[非=]

如果这些轴没有容器,它可能对以下轴很有用:同级轴::,或者子轴::

您可以使用字符串或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