返回全文元素(包括子/后代元素)

chu*_*ley 3 xpath nokogiri

我试图从div/p页面上第一次出现的文本,只有第一个p.<p>包含其他标记(<b>,<a href>),<p>返回的文本在任何其他标记处停止.有没有办法让这一行返回<p>和</ p>之间的所有文本,甚至是嵌入式标签之间?

puts doc.xpath('html/body/div/p[1]/text()').first
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 5

用途:

string((//div/p)[1])
Run Code Online (Sandbox Code Playgroud)

在计算此XPath表达式时,结果是p文档中第一个作为子项的子句的字符串值div.

根据定义,元素的字符串值是其所有文本节点后代的串联(按文档顺序).

因此,您可以获得由此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>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于以下XML文档时(没有提供!):

<p>
 Hello <b>
  <a href="http://www.w3.org/TR/2008/REC-xml-20081126/">XML</a>
   World!</b>
</p>
Run Code Online (Sandbox Code Playgroud)

输出评估的XPath表达式的结果:

 Hello XML
   World!
Run Code Online (Sandbox Code Playgroud)