我试图采用这种XML
<tag>text before childs
<child1 attr="value"/>
<child2 attr="value"/>
text after childs
</tag>
我有child1
和child2
的模板,看起来像这样
<xsl:template match="child1">
GOOFY
</xsl:template>
和
<xsl:template match="child2">
DONALDDUCK
</xsl:template>
我想用
之类的东西来转换XML<tag>
text before childs GOOFY DONALDDUCK text after childs
</tag>
根据michael.hor257k的建议,我尝试使用这样的身份模板
<xsl:template match="tag">
<xsl:copy>
<xsl:apply-templates select="child1"/>
<xsl:apply-templates select="child2"/>
</xsl:copy>
</xsl:template>
但结果我得到了
<tag/>
或
<tag>GOOFY DONALDDUCK</tag>
答案 0 :(得分:1)
我没有看到完整的样式表,而您使用身份转换模板确实不。如果你的样式表看起来像这样:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="child1">
GOOFY
</xsl:template>
<xsl:template match="child2">
DONALDDUCK
</xsl:template>
</xsl:stylesheet>
然后应用于输入示例的结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<tag>text before childs
GOOFY
DONALDDUCK
text after childs
</tag>