XSLT:在元素的副本中应用模板

时间:2013-06-04 11:22:56

标签: xslt attributes xslt-1.0

我需要输出带有所有属性的元素副本和内部子元素的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

2 个答案:

答案 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>