用于删除空格的xpath表达式

时间:2012-08-02 11:57:49

标签: 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)字符串。这可能吗?

6 个答案:

答案 0 :(得分:116)

<强>予。使用此单个XPath表达式:

translate(normalize-space(/tr/td/a), ' ', '')

<强>解释

  1. normalize-space() 从其参数生成一个新字符串,其中删除任何前导或尾随空格(空格,制表符,NL或CR字符)以及任何中介空格由单个空格字符替换。

  2. translate() 获取normalize-space()生成的结果,并生成一个新字符串,其中每个剩余的中间空格都被空字符串替换。


  3. <强> II。可替代地

    translate(/tr/td/a, ' &#9;&#10;&#13', '')
    

答案 1 :(得分:19)

请尝试以下xpath表达式:

Comparator.comparing(Demo2::getI)

答案 2 :(得分:4)

您可以像在//a[normalize-space()="16 : 00"]中一样使用XPath的normalize-space()

答案 3 :(得分:2)

  • 您可以检查text()节点是否为空。

    /路径/文本()[不(= '')]

对于跟随兄弟的轴::如果它们不是容器,或者带有子::。

  • 您可以使用xpath 2的string()或regex()函数。

注意:有些评论说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)或一些等效函数来删除开头或结尾处的任何空格