Java - 保存XML

时间:2016-06-14 09:00:28

标签: java xml dom whitespace

我有XML文件,我只需删除1个属性。

保存已编辑的XML后,删除了空格,这是我需要的! (见图)

我何时会失去空白?

当我在doc中解析xml时? 或者当我转换回xml?

我已经在Java Transformer中使用了很多输出属性,如:

    transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes");
    transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "RequestMessage Code");

避免其他格式化问题。

有没有办法保留空白?

谢谢

编辑1:XSL我用来避免按字母顺序排列

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt" version="2.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" xalan:indent-amount="2"/>

    <!--Identity transformation (see http://www.w3.org/TR/xslt#copying).-->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@Item"/>
            <xsl:apply-templates select="@Name"/>            
            <xsl:apply-templates select="@Include"/>
            <xsl:apply-templates select="@Variant"/>
            <xsl:apply-templates select="@Authorization"/>
            <xsl:apply-templates select="@Alias"/>
            <xsl:apply-templates select="@Source"/>
            <xsl:apply-templates select="@Field"/>
            <xsl:apply-templates select="@DgMemberName"/>
            <xsl:apply-templates select="@DgGroupName"/>
            <xsl:apply-templates select="@Target"/>
            <xsl:apply-templates select="@Host"/>
            <xsl:apply-templates select="@DataGroup"/>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Here u see the Diff between the two XML files

1 个答案:

答案 0 :(得分:1)

我认为您的问题的答案是无法使用任何易于使用的XML序列化程序来完成。

我同情这个要求,因为我也有格式化的XML文件。但我认为这是一个非常罕见的用例,如果你想解决它,你需要编写自己的序列化器。