删除xml文件的缩进

时间:2013-02-25 15:13:44

标签: java regex removing-whitespace

我正在编写一个我将用于单元测试的函数。我想比较XML文件,但由于其中一个将由第三方库创建,我想减轻由于不同缩进而导致的任何可能的差异。因此我写了以下函数:

private String normalizeXML(String xmlString) {
    String res = xmlString.replaceAll("[ \t]+", " ");
    // leading whitespaces are inconsistent in the resulting xmls.
    res = res.replaceAll("^\\s+", "");
    return res.trim();
}

但是,此函数不会删除XML每行的前导间隔。

当我以这种方式编写函数时(第一个正则表达式的差异):

private String normalizeXMLs(String xmlString) {
    String res = xmlString.replaceAll("\\s+", " ");
    // leading whitespaces are inconsistent in the resulting xmls.
    res = res.replaceAll("^\\s+", "");
    return res.trim();
}

它确实删除了尾随空白区域,但它也使xml显示为单行,当您需要比较差异时,这非常令人不安。

我无法证明为什么第一个实现不会取代前导间隔。有什么想法吗?

编辑:更有趣的是,如果我进行单行操作:

String res = xmlString.replaceAll("^\\s+", "");

此行不会删除任何标识!

3 个答案:

答案 0 :(得分:5)

使用专用的XML比较工具(如XMLUnit)可以更安全地使用专用的XML比较工具,它可以让您准确定义哪些差异是重要的,哪些不是。尝试使用正则表达式修改XML数据很少是一个好主意,您应该使用一个正确的XML解析器,它知道构成格式良好的XML的所有规则。

答案 1 :(得分:0)

也许:

String res = xmlString.replaceAll("[ \\t]+", " ");

不是......

答案 2 :(得分:0)

这个对我有用:

    private static String normalizeXMLs(String xmlString) {
    String res = xmlString.replaceAll("\\t", "");
    return res.trim();
}
祝你好运:)