用XSLT向每个子节点添加一个属性



早上好,我正在尝试编写XSLT 1.0 trasformation以转换此

<foo>
  <document>
    <content name="bar1">Bar1</content>
    <content name="bar2">Bar2</content>
    <content name="bar3">Bar3</content>
     ...
  </document>
</foo>

到这个

<foo>
  <document>
    <content name="bar1" set="top">Bar1</content>
    <content name="bar2" set="top">Bar2</content>
    <content name="bar3" set="top">Bar3</content>
     ...
  </document>
</foo>

所以我尝试了此XSLT转换

<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*" />
  </xsl:copy>
</xsl:template>
<foo>
  <document>
    <xsl:template match="/document/*">
      <xsl:copy>
        <xsl:apply-templates />
        <xsl:attribute name="set" select="'top'" />
      </xsl:copy>
    </xsl:template>
 </document>
</foo>

但可悲的是它没有起作用

我尝试在XPATH和XSLT指南中进行了很多搜索,但我无法获得这项工作,有人可以帮助我吗?

您的XSLT语法已关闭。有很多方法可以做到这一点,这是一种相当通用的方法:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="content">
    <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:attribute name="set">top</xsl:attribute>
      <xsl:value-of select="." />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

第一个模板是一个身份模板;第二个模板匹配content节点,复制它们,其属性,并添加属性set="top"和元素的内容。

相关内容

  • 没有找到相关文章

最新更新