我正在尝试使用模板实现一个XSL逻辑。对于所有Test元素,我需要添加一个父标记“Result”
<xsl:stylesheet exclude-result-prefixes="xs" version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="Test">
<RESULT>
<xsl:copy-of select="."/>
</RESULT>
<xsl:apply-templates select="node()"/>
</xsl:template>
</xsl:stylesheet>
输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<Test>
<goal>
Books
</goal>
<secret>
<Test>
Noodles
</Test>
</secret>
</Test>
预期产出:
<Output>
<RESULT>
<Test>
<goal>Books</goal>
<secret>
<Test>Noodles</Test>
</secret>
</Test>
</RESULT>
<RESULT>
<Test>Noodles</Test>
</RESULT>
</Output>
实际输出:
<Output>
<RESULT>
<Test>
<goal>Books</goal>
<secret>
<Test>Noodles</Test>
</secret>
</Test>
</RESULT>
Books
<RESULT>
<Test>Noodles</Test>
</RESULT>
Noodles
</Output>
我在输出中得到一个额外的文本。有什么帮助吗?
答案 0 :(得分:1)
由于XSLT's built in rules,您获得了额外的文字输出。
您可以通过添加此模板来覆盖文本的内置规则:
<xsl:template match="text()"/>
如果您只是使用xsl:copy-of
和/或xsl:value-of
,这将正常工作。如果您依靠text()输出的内置规则,则必须修改替换或更改select
中的xsl:apply-templates
(已经提供了一个选项)作者:Sivaa Nethaji)。