考虑以下情况。给定:XML和XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan">
<xsl:output method="xml" indent="yes" xalan:indent-amount="2" encoding="UTF-8" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="info">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
<xsl:element name="foo">
<xsl:text>bar</xsl:text>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
和
<?xml version="1.0" encoding="UTF-8"?>
<root>
<info>
<somthing>lorem ipsum</somthing>
</info>
</root>
使用给定的XSLT模板转换XML时,我得到了这个结果
<?xml version="1.0" encoding="UTF-8"?><root>
<info>
<somthing>lorem ipsum</somthing>
<foo>bar</foo>
<foo>bar</foo> <!-- too much -->
<foo>bar</foo> <!-- too much -->
</info>
</root>
它应该标识复制XML文档并将<foo>bar</foo>
附加到<info>
元素,但它会添加两个aditional <foo>
。我尝试了很多,但无法弄清楚为什么会这样做?
答案 0 :(得分:0)
您可以尝试从第二个模板中删除标签xsl:apply-templates吗?
<xsl:template match="info">
<xsl:copy>
<xsl:element name="foo">
<xsl:text>bar</xsl:text>
</xsl:element>
</xsl:copy>
</xsl:template>