2011-10-29 89 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:不客气。 –

相关问题