通过XSLT转换XML - 如何完全删除标签?

时间:2017-08-20 11:17:50

标签: xml xslt

此时此刻,我正在使用XSLT&需要帮忙。我有这个XML文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<entries>
    <entry>
        <field>1</field>
    </entry>
    <entry>
        <field>2</field>
    </entry>
    <entry>
        <field>3</field>
    </entry>
    <entry>
        <field>4</field>
    </entry>
    <entry>
        <field>5</field>
    </entry>
</entries>

我需要格式化这个XML以重新设置它:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<entries>
    <entry field="1">
    <entry field="2">
    <entry field="3">
    <entry field="4">
    <entry field="5">
</entries>

但我重申了这一点:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><entries>

        <entry field="1">


        <entry field="2">


        <entry field="3">


        <entry field="4">


        <entry field="5">

</entries>

XSLT文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output method="xml" indent="no" encoding="UTF-8" standalone="no"/>
    <xsl:template match="entries">
        <entries>
            <xsl:apply-templates/>
        </entries>
    </xsl:template>
    <xsl:template match="entry">
            <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="field">
        <xsl:text disable-output-escaping="yes">&lt;entry field="</xsl:text><xsl:apply-templates/><xsl:text disable-output-escaping="yes">"&gt;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

正如我们所见,XSLT-stylesheet只是删除标签,而不删除它们,留下空间。如何完全删除标签<entry>&amp;将第一个<entries>标记移到下一行?否则,如何使XML成为所需的形式?

1 个答案:

答案 0 :(得分:0)

如果你真的必须输出格式错误的XML(即根本不是XML文档),那么我建议你使用text作为输出方法并自己格式化缩进:

XSLT 1.0

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

<xsl:template match="entries">
    <xsl:text>&lt;entries></xsl:text>
        <xsl:apply-templates/>
    <xsl:text>&#10;&lt;/entries></xsl:text>
</xsl:template>

<xsl:template match="entry">
    <xsl:text>&#10;    &lt;entry field="</xsl:text>
    <xsl:value-of select="field"/>
    <xsl:text>"></xsl:text>
</xsl:template>

</xsl:stylesheet>