在现有节点中使用XSLT插入XML元素

时间:2012-08-13 16:36:55

标签: xslt

我有以下XML文档:

<root someAttribute="someValue" />

现在我想使用XSLT添加标签,以便文档看起来像这样:

<root someAttribute="someValue">
  <item>TEXT</item>
</root>

如果我再次重复使用XSLT,它应该只添加另一个项目:

<root someAttribute="someValue">
  <item>TEXT</item>
  <item>TEXT</item>
</root>

这听起来很容易,不是吗?这是我尝试过很多东西后得到的最好的东西:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
    <xsl:param name="message" />

    <xsl:output method="xml" encoding="utf-8"/>

        <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="*"/>
            <item>
                <xsl:value-of select="$message" />
            </item>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

它确实/几乎/我所要求的,除了它“忘记”根元素的属性。我在stackoverflow和其他地方找到了许多其他解决方案,这些解决方案与我的解决方案有共同点,它们会松散根元素的属性。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您目前只转换子节点,而不是属性。

<xsl:template match="root">
    <xsl:copy>
        <xsl:copy-of select="node()|@*"/> <!-- now does attrs too -->
        <item>
            <xsl:value-of select="$message" />
        </item>
    </xsl:copy>
</xsl:template>