XSLT在子项之前复制文本并转换子项

时间:2014-09-29 10:13:01

标签: xml xslt

我试图采用这种XML

<tag>text before childs
    <child1 attr="value"/>
    <child2 attr="value"/>
    text after childs
</tag>

我有child1child2的模板,看起来像这样

<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>

1 个答案:

答案 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>