我需要输出元素及其所有属性的副本,并在其子元素上应用模板。主要问题是属性是未知的。
XML:<elem attrA="a" attrB="b" ... attrN="n">
<child><child>
<child><child>
</elem>
我尝试遍历所有属性,但无法使其工作。
<xsl:template match="elem">
<xsl:element name="name(.)">
<xsl:for-each select="@*">
<xsl:attribute name="name()">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
所需输出:<elem attrA="a" attrB="b" ...="" attrN="n">
<processed-child></processed-child>
<processed-child></processed-child>
</elem>
给定子模板:
<xsl:template match="child">
<processed-child><xsl:value-of select="."/></processed-child>
</xsl:template>
编辑:XSLT 1.0 <xsl:template match="elem">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
不工作吗?
为了补充Tomalak的答案,最后的解决方案进行了一些增强,以支持围绕标记的文本呈现。(原文中没有描述,但这是一项要求)
完整的解决方案:
<xsl:template match="elem">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="*|text()" />
</xsl:copy>
</xsl:template>
<xsl:template match="text()"><xsl:value-of select="."/></xsl:template>