2011-10-29 112 views
2

我試圖從div/p頁面上的第一次出現獲取文本,並且只有第一個p。 <p>包含其他標籤(<b>,< a href >)並且從<p>返回的文本在任何其他標籤處停止。是否有辦法讓該行返回<和</>之間的所有文本,即使在嵌入式標籤之間?返回全文元素(包括子元素/後代元素)

puts doc.xpath('html/body/div/p[1]/text()').first 

回答

4

使用

string((//div/p)[1]) 

當這個XPath表達式求值的結果是第一p的是一個div的子文檔中的字符串值。

按照定義,string value是一個元素的連接(按文檔順序)的所有文本節點的後代。

因此,您可以跳過以此p元素爲根的子樹中的所有文本,並跳過任何其他節點(元素,註釋,PI)。

XSLT - 基於驗證

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="string(p)"/> 
</xsl:template> 
</xsl:stylesheet> 

當在下面的XML文檔施加這種轉變:

<p> 
Hello <b> 
    <a href="http://www.w3.org/TR/2008/REC-xml-20081126/">XML</a> 
    World!</b> 
</p> 

所評估的結果(沒有這樣的提供!)輸出XPath表達式

Hello XML 
    World! 
+0

感謝Dimitre。應該仔細看看xpath文檔。 – chuckfinley

+0

@chuckfinley:不客氣。 –

相關問題