2012-08-02 118 views
37

我有这样的HTML:XPath表达式来删除空白

<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)字符串没有多余的空格。这可能吗?

+3

使用什么实现 - PHP还是什么? XPath关心节点的检索,而不是字符串处理。任何删除空白需要在检索后单独完成。 – Utkanos 2012-08-02 12:04:12

+0

我认为有一个表达式来获得所需的文本没有空格 – adellam 2012-08-02 12:06:43

+0

如果我们正在谈论PHP(我以某种方式,因为它是关于HTML),你可以设置preseveWhiteSpace为你的DOMDocument对象为false,导致自动去除多余的空白空间。 http://www.php.net/manual/de/class.domdocument.php#domdocument.props.preservewhitespace – inVader 2012-08-02 12:12:03

回答

-11

使用xpath-expressen获取标签的内容,然后使用trim()(假设您使用php)或某些等效函数在开头或结尾处删除任何空格。

+0

你能发布更多细节请。 – adellam 2012-08-02 12:07:49

+4

减1因为问题是如何使用XPath,而不是PHP ... – Borna 2015-12-15 03:39:56

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

    /path/text()[not(.=“”)]

它可以是具有像以下同胞轴有用::如果这些是不容器,或与子::。

  • 你可以使用字符串()或正则表达式()的XPath功能2.

注意:一些评论说的XPath不能做字符串操作,即使这不是真正设计用于你可以做一些基本的事情:contains(),starts-with(),replace()。

如果你想检查空白节点会更困难,因为你通常会有一个节点列表结果集,而大多数xpath函数(比如match或replace)只能操作一个节点。

  • 你可以单独节点和字符串操作

所以,你可以使用XPath检索容器或文本节点的列表,然后用另一种语言处理它。 (例如java,php,python,perl)。

90

I.使用此单个XPath表达式

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

说明

  1. normalize-space()产生从它的参数一个新的字符串,其中任何前导或尾随白色 - 空格(空格,制表符,NL或CR字符)被删除,并且任何中间白色空间被替换为单个空格字符。

  2. translate()采用由normalize-space()所产生的结果,并产生其中每个剩余的中间空间的由所述空字符串替换一个新的字符串。


II。另外

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

很好用!快速清理了我正在构建的InfoPath模板中的一个字段。 – Shrout1 2013-07-30 13:01:12

+0

@ Shrout1,不客气。 – 2013-07-30 14:17:07

+0

是否有最短的XPATH表达式来通过XML文件获取CDATA节点? – 2014-08-02 11:48:33

9

请尝试以下XPath表达式:

在很多情况下,我们还可以使用XPath功能正常化空间(),它从它的字符串参数生成另一个字符串,其中组前导空白和尾随空白被切断,并且字符串中的每个空白都被一个空格替换。

在上述情况下,我们将简单地使用下面的XPath表达式:

/*/aChild [正常化空间()= '的Hello World']

所以,

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

+0

这个答案对我有帮助,对我来说是最直接的 – Michal 2017-03-13 08:27:30