使用xslt在现有xml文件中创建新元素

时间:2016-09-28 11:49:08

标签: xml xslt

我是xslt的新手,请帮忙: 我想使用xslt在现有的xml文件中创建新元素。请查看以下示例代码。

现有产出:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="class.xsl"?>
<class>
<student>Jack</student>
<student>Harry</student>
<student>Rebecca</student>
<teacher>Mr. Bean</teacher>

</class>

预期产出:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="class.xsl"?>
<class>
<student>Jack</student>
<student>Harry</student>
<student>Rebecca</student>
<teacher>Mr. Bean</teacher>
<professor>SaiBaba</professor>
</class>

1 个答案:

答案 0 :(得分:0)

带有逻辑的最简洁和最短的模板之一(适合您的问题)将是:

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

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

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

</xsl:stylesheet>

@*匹配所有属性

node()是一个匹配子轴上所有元素的函数,类型为

  • 元素
  • 文本节点
  • 处理指令(PI)节点
  • 评论节点

名为indentity-copy的第一个模板是从源到输出的1:1副本。在Wiki here查看更多信息。

第二个模板与您的元素class匹配,复制自身并添加元素professor。 Alternativ只用纯文本创建元素,你可以做得更严格一点 - 减少/避免空白问题 - 通过

<xsl:element name="professor">
    <xsl:text>SaiBaba</xsl:text>
</xsl:element>
相关问题