我需要输出带有所有属性的元素副本和内部子元素的apply-templates。 主要问题是属性未知。
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
答案 0 :(得分:3)
确实
<xsl:template match="elem">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
不起作用?
答案 1 :(得分:1)
为了补充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>