2014-02-09 34 views
1

我有三個文本節點樣本,我想使用通用x路徑提取文本的三個不同部分。Xpath - 從一個文本節點提取文本字符串的多個特定不同部分

首先

<p class="product-summary"> 
       This is an amazing game from the company Midway Games. Excellent gameplay. Very good game. 
      </p> 

<p class="product-summary"> 
       New Line Cinema distributed this movie in 1995. 
      </p> 

<p class="product-summary"> 
       New game from 2011, with new 3D graphics. This game was made by NetherRealm Studios. 
      </p> 

提取應該是Midway GamesNew Line CinemaNetherRealm Studios 注意,文本節點八方通僅包括一個合作公司,從來沒有兩個或三個(只有一個)。

我的嘗試是從this question,但問題是它沒有工作,也沒有包括所有三家公司。

substring('Midway Games',1,12*contains(//p[@class='product-summary']/following-sibling::text()[1], 'Midway Games')) 

回答

1

隨着輸入將只包含其中的一個,你可以使用concat加入的結果。

concat(
    substring('Midway Games', 1, 
     12*contains(//p[@class='product-summary'], 'Midway Games')), 
    substring('Line Cinema', 1, 
     11*contains(//p[@class='product-summary'], 'Line Cinema')), 
    substring('NetherRealm Studios', 1, 
     19*contains(//p[@class='product-summary'], 'NetherRealm Studios')) 
) 

您可以根據需要刪除爲了便於閱讀而添加的換行符。

我不得不修復您提供的查詢:文本節點不是following-sibling,而是孩子。您的XPath處理器將查詢該元素下方的(連接的)文本節點,因爲contains對字符串有效。

+0

非常感謝Jens。這工作非常好。這應該與DOMXpath一起工作嗎? –

+0

如果您提到PHP的DOMXPath類:是的,他們使用我測試過的libxml。無論如何,您可能會考慮運行多個查詢並將所有內容一起添加到PHP中,這可能是XPath破解後的更乾淨的代碼。 –

相關問題