我试图创建一个模板,允许我从文档中的文本生成新元素。例如,如果xml输入是
<c>
<a>foo</a>
<b>bar</b>
</c>
我想创建一个生成以下输出的样式表:
<c>
<a><el att="foo"></a>
<b><el att="bar></b>
</c>
我写下面的模板
<xsl:template match="text()">
<xsl:element name="el">
<xsl:attribute name="att"><xsl:value-of select="text()"/></xsl:attribute>
</xsl:element>
</xsl:template>
但这场比赛并没有起作用 - 它考虑了#34;文字&#34;还有其他标签末尾和另一个标签的开头之间的空格,并且未设置属性的值。有人能帮我吗?非常感谢
答案 0 :(得分:1)
尝试使用xsl:strip-space
忽略无关紧要的空格。
此外,在您的模板中,您的上下文已为text()
,因此请使用.
(short for self::node()
)或normalize-space()
。
示例(使用AVT略微简化)...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" priority="1">
<el att="{.}"/>
</xsl:template>
</xsl:stylesheet>