Xslt:将节点添加到根元素

时间:2011-07-18 15:44:38

标签: xml xslt

我有简单的XML文件:

<MyRoot>
   <Value key="TARGET">foo</Value>
   <Value key="MODEL">bar</Value>
   <Value key="MANUFACTURER">bla</Value>
</MyRoot>

我想使用XSLT向MyRoot添加一个Value节点。我无法弄清楚如何。

结果应该是:

<MyRoot>
   <Value key="TARGET">foo</Value>
   <Value key="MODEL">bar</Value>
   <Value key="MANUFACTURER">bla</Value>
   <Value key="NEWNODE">yeahIMadeIt</Value>
</MyRoot>

到目前为止我所拥有的是:

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
<xsl:template match="/">
     <xsl:apply-templates select="@* | *"/>
     <Value key="NEWNODE">yeahIMadeIt</Value>
</xsl:template>

但是这会将新的Value节点置于根节点下:

<MyRoot>
   <Value key="TARGET">foo</Value>
   <Value key="MODEL">bar</Value>
   <Value key="MANUFACTURER">bla</Value>
</MyRoot>
<Value key="NEWNODE">yeahIMadeIt</Value>

1 个答案:

答案 0 :(得分:7)

你走在正确的轨道上。您需要更改模板匹配。尝试:

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
</xsl:template>

<xsl:template match="MyRoot">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
        <Value key="NEWNODE">yeahIMadeIt</Value>
    </xsl:copy>
</xsl:template>