删除结束标记jdom中的空格

时间:2014-07-21 09:15:00

标签: java xml jdom jdom-2

我正在使用JDom 2.0.5来修改xml。我还有一个Junit测试用例,检查它是否被正确修改。它有一个输入xml,一个测试方法(转换xml)和一个新的xml(结果)。稍后它会将输出与应该是最终结果的文件进行比较。

FileUtils.contentEquals(newXml, modelXml);

但这总是错误的,因为JDom会自动修改每个结束标记。我无法更改模型,因为这是一项无法修改的要求。

Input: <properties/>
Output: <properties />    --> should be as input:: <properties/>

如何避免JDom更改此标记?

SAXBuilder builder = new SAXBuilder();
Document doc = (Document) builder.build(xmlFile);

// Add, remove some elements ...

XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, new FileWriter(newXml, false));

2 个答案:

答案 0 :(得分:0)

这里的“改变”实际上是完全有效的。额外的空间对XML的含义没有任何影响。

(换句话说,JDom数据结构不会对源代码中存在的非重要空白进行编码。因此,JDom在格式化输出XML时无法重现输入XML的空白区域。 )


真正的问题是您的期望不正确。您根本无法可靠地比较XML文档,就像它们是字符序列一样。

阅读此Q&amp; A了解各种正确的方法来比较Java中的XML:

答案 1 :(得分:0)

也许有人会需要它。 要消除在结束的“ />”标记之前的多余空间,只需在其继承的printElement()类中重写AbstractXMLOutputProcessor方法即可。 例如:

public class MyXMLProcessor extends AbstractXMLOutputProcessor {
    protected void printElement(...) {
        ...
        // replace in two places:
        write(out, "/>");
        ...
    }
}

然后:

XMLOutputter xmlOutput = new XMLOutputter(new MyXMLProcessor());