您可以定义一个模板匹配作为直接子节点的文本节点recipe
:
<xsl:template match="recipe/text()">
<action><xsl:value-of select="normalize-space()" /></action>
</xsl:template>
完整的 XSLT 示例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<xsl:template match="recipe/text()">
<action><xsl:value-of select="normalize-space()" /></action>
</xsl:template>
</xsl:stylesheet>
请注意,即使使用- 仅影响仅包含空格的文本节点,它normalize-space()
也是必需的,它不会从包含任何非空格字符的节点中去除前导和尾随空格。如果你有xsl:strip-space
<action><xsl:value-of select="." /></action>
那么结果会是这样的
<recipe>
<action>
get a bowl
</action>
<ingredient>flour</ingredient>
<ingredient>milk</ingredient>
<action>
mix it all together!
</action>
</recipe>