Java 删除结束标记jdom中的空白
我正在使用JDOM2.0.5修改xml。我还有一个Junit测试用例,检查它是否被正确修改。它有一个输入xml、一个测试方法(转换xml)和一个新的xml(结果)。稍后,它将输出与最终结果所对应的文件进行比较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
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());