我怎样才能比较两个元素的等价性?

时间:2011-09-10 19:37:34

标签: java jdom

我正在为使用JDOM读写XML的代码编写单元测试。因此,我需要一些方法来比较我的代码生成的JDOM Element和引用Element,以确保它们是等价的(相同的名称,名称空间和属性,以及它的子项相同,递归地)。

不幸的是,Element.equals仅测试元素是否在引用上相等。如何才能最好地确定两个元素是否代表相同的树?

2 个答案:

答案 0 :(得分:3)

以下内容应检查两个XML元素是否等效:

String myElementString = XMLOutputter.outputString(myElement);
String testElementString = XMLOutputter.outputString(testElement);
boolean equals = myElementString.Equals(testElementString);

答案 1 :(得分:1)

我只能想到三种方式:

  1. 使用Element的可公开访问字段手动创建要进行比较的代码。
  2. 使用Java反射创建代码以枚举Element的字段并将它们全部进行比较。浅或深的比较可以满足您的需求。
  3. 使用其中一个xxxOutputter类输出每个Element并比较输出。例如。使用org.jdom.output.XMLOutputter从每个Element创建一个XML字符串,并比较字符串。
  4. 所有人都很讨厌!