2012-08-02 114 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