用于删除空格的xpath表达式

ade*_*lam 50 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>
Run Code Online (Sandbox Code Playgroud)

我想在没有额外空格的情况下提取(16:00)字符串.这可能吗?

Dim*_*hev 125

I.使用此单个XPath表达式:

translate(normalize-space(/tr/td/a), ' ', '')
Run Code Online (Sandbox Code Playgroud)

说明:

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

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


II.另外:

translate(/tr/td/a, ' &#9;&#10;&#13', '')
Run Code Online (Sandbox Code Playgroud)

  • @ArupRakshit,XPath 数据模型中没有“CDATA 节点”,因此“不可能”将 CDATA 区分为包含它的文本节点的一部分。同样的方式,因为无法知道短标签是否用于没有子元素的元素,或者引号或撇号是否用作属性值周围的分隔符。 (2认同)

小智 19

请尝试以下xpath表达式:

//td[@class='score-time status']/a[normalize-space() = '16 : 00']
Run Code Online (Sandbox Code Playgroud)


Udh*_*iya 7

您可以使用 XPath 的normalize-space()作为//a[normalize-space()="16 : 00"]


小智 1

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

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

如果这些不是容器,或者与 child:: 等轴一起使用,它可能很有用。

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

注意:一些评论说 xpath 不能进行字符串操作...即使它并不是真正设计的,您也可以做基本的事情:包含(),开始与(),替换()。

如果你想检查空白节点,那就困难得多,因为你通常会有一个节点列表结果集,而大多数 xpath 函数,如匹配或替换,只操作一个节点。

  • 您可以将节点和字符串操作分开

因此,您可以使用 xpath 检索容器或文本节点列表,然后用另一种语言处理它。(例如 java、php、python、perl)。