Java 删除结束标记jdom中的空白

Java 删除结束标记jdom中的空白,java,xml,jdom,jdom-2,Java,Xml,Jdom,Jdom 2,我正在使用JDOM2.0.5修改xml。我还有一个Junit测试用例,检查它是否被正确修改。它有一个输入xml、一个测试方法(转换xml)和一个新的xml(结果)。稍后,它将输出与最终结果所对应的文件进行比较 FileUtils.contentEquals(newXml, modelXml); 但这总是错误的,因为每个结束标记都是由JDom自动修改的。我不能更改模型,因为这是一个不能修改的需求 Input: <properties/> Output: <properties

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

FileUtils.contentEquals(newXml, modelXml);
但这总是错误的,因为每个结束标记都是由JDom自动修改的。我不能更改模型,因为这是一个不能修改的需求

Input: <properties/>
Output: <properties />    --> should be as input:: <properties/>
这里的“变化”实际上是完全有效的。额外的空间对XML的含义没有影响

(换句话说,JDom数据结构不编码源标记中是否存在不重要的空白。因此,JDom在格式化输出XML时无法复制输入XML的空白。)


真正的问题是你的期望是不正确的。如果XML文档是字符序列,就无法可靠地进行比较

阅读本问答,了解在Java中比较XML的各种正确方法:


    • 也许有人会需要它。 为了消除关闭“/>”标记之前的额外空间,在继承的
      AbstractXMLOutputProcessor
      类中重写
      printElement()
      方法就足够了。 例如:

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

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