如何使用XSLT删除XML中的多个根标签?

时间:2014-06-27 12:40:23

标签: xml xslt

我的XML看起来像:

<PAYUSW2R>  
<G_EMPLOYEE1>
    ..
    .
</G_EMPLOYEE1>

</PAYUSW2R>
<PAYUSW2R>

<G_EMPLOYEE2>
    ..
    .
</G_EMPLOYEE2>

</PAYUSW2R>

我希望将其作为格式良好的XML,如下所示:

<PAYUSW2R>  
<G_EMPLOYEE1>
    ..
    .
</G_EMPLOYEE1>
<G_EMPLOYEE2>
    ..
    .
</G_EMPLOYEE2>  
</PAYUSW2R>

基本上我想删除额外的根标签&lt; PAYUSW2R&gt;。 我们可以使用XSLT实现这一目标吗?请在这里提供一些帮助。

1 个答案:

答案 0 :(得分:0)

由于对XSLT的XML输入需要格式良好,因此您必须首先将您的实例包装在临时根元素中。如何执行此操作取决于您如何运行XSLT。它可以像将新的开始/结束标记与现有XML连接一样简单。

你最终应该得到的是:

<temp>
    <PAYUSW2R>  
        <G_EMPLOYEE1>
            ..
            .
        </G_EMPLOYEE1>

    </PAYUSW2R>
    <PAYUSW2R>

        <G_EMPLOYEE2>
            ..
            .
        </G_EMPLOYEE2>

    </PAYUSW2R>    
</temp>

然后你的XSLT看起来像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:apply-templates select="*[1]"/>
    </xsl:template>

    <xsl:template match="/*/*[1]">
        <xsl:copy>
            <xsl:copy-of select="@*|node()|following-sibling::*/*"/>
        </xsl:copy>        
    </xsl:template>

</xsl:stylesheet>

这将导致输出:

<PAYUSW2R>
   <G_EMPLOYEE1>
            ..
            .
        </G_EMPLOYEE1>
   <G_EMPLOYEE2>
            ..
            .
        </G_EMPLOYEE2>
</PAYUSW2R>