XSLT:在元素副本内应用模板



我需要输出元素及其所有属性的副本,并在其子元素上应用模板。主要问题是属性是未知的。

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>

相关内容

  • 没有找到相关文章

最新更新