我是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>
答案 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()
是一个匹配子轴上所有元素的函数,类型为
名为indentity-copy
的第一个模板是从源到输出的1:1副本。在Wiki here查看更多信息。
第二个模板与您的元素class
匹配,复制自身并添加元素professor
。 Alternativ只用纯文本创建元素,你可以做得更严格一点 - 减少/避免空白问题 - 通过
<xsl:element name="professor">
<xsl:text>SaiBaba</xsl:text>
</xsl:element>