XML:
<data><ph>Foo</ph>Bar</data>
XSL:
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="data/ph"/>
<xsl:apply-templates select="data"/>
</xsl:template>
<xsl:template match="data/ph">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="data">
<xsl:value-of select="."/>
</xsl:template>
当XSL选择带有<xsl:template match="data"><xsl:value-of select="."/>
的/ data /中的文本时,它还选择子实体data / ph中的文本。如何仅指向/ data /的文本,而不包括/ data / ph /?
我的输出应该是:FooBar,而不是FooFooBar。
答案 0 :(得分:2)
当XSL选择带有
/data/
的{{1}}中的文字时,它也会选择文字 在子实体<xsl:template match="data"><xsl:value-of select="."/>
中。我如何仅指向文本data/ph
,不包括/data/
的文字?
使用强>:
/data/ph/
这将复制当前节点的所有文本节点子节点。
通过此更正,整个转换变为:
<xsl:copy-of select="text()"/>
并应用于提供的XML文档:
<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:apply-templates select="data/ph"/>
<xsl:apply-templates select="data"/>
</xsl:template>
<xsl:template match="data/ph">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="data">
<xsl:copy-of select="text()"/>
</xsl:template>
</xsl:stylesheet>
产生了想要的正确结果:
<data><ph>Foo</ph>Bar</data>