我想将mattext节点重命名为text,但保留其属性和所有子节点/属性
输入XML
<material>
<mattext fontface="Tahoma">
<p style="white-space: pre-wrap">
<font size="11">Why are the astronauts in the video wearing special suits? (Select two)</font>
</p>
</mattext>
</material>
输出
<material>
<text fontface="Tahoma">
<p style="white-space: pre-wrap">
<font size="11">Why are the astronauts in the video wearing special suits? (Select two)</font>
</p>
</text>
</material>
我使用了以下xsl:
<xsl:template name="content">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- Build stem -->
<xsl:template match="mattext">
<text>
<!-- Option text -->
<xsl:call-template name="content"/>
</text>
</xsl:template>
但它不保留初始字体属性,似乎输出剥离标签的纯文本
答案 0 :(得分:3)
如果这是您完整的XSLT,我可以理解您的结果。你正在匹配一个元素,&lt; mattext&gt;。所有其他操作都由默认行为处理,即复制文本节点。我想你想要Identity Transformation对&lt; mattext&gt;进行特殊处理。元素:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="mattext">
<text>
<xsl:apply-templates select="@* | node()" />
</text>
</xsl:template>