我有简单的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>
答案 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>