这不能用单个 XPath 1.0 表达式指定。
您需要首先选择所有相关div
元素:
//div[@id='SNT']
然后为每个选定的节点获取其字符串节点:
string(.)
在 XPath 2.0 中,这可以用一个表达式来指定:
//div[@id='SNT]/string(.)
基于 XSLT 的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="div[@id='SNT']">
<xsl:copy-of select="string()"/>
========
</xsl:template>
</xsl:stylesheet>
当此 XSLT 1.0 转换应用于以下 XML 文档(提供的 XML 片段,包装在单个顶部元素中)时:
<t>
<div id="SNT">text1</div>
<div id="SNT">text2</div>
<div id="SNT">textbase1<span style='color: #EFFFFF'>text3</span></div>
<div id="SNT">textbase2<span style='color: #EFFFFF'>text4</span></div>
</t>
相关div
元素被选择(匹配)并由唯一指定的模板处理,其中string(.)
XPath 表达式被评估,其结果被复制到输出:
text1
========
text2
========
textbase1text3
========
textbase2text4
========
对于 XPath 2.0 表达式:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select="//div[@id='SNT']/string(.)"/>
</xsl:template>
</xsl:stylesheet>
当此 XSLT 2.0 转换应用于同一个 XML 文档(上图)时,将评估 XPath 2.0 表达式并将结果(四个字符串)复制到输出:
text1 text2 textbase1text3 textbase2text4