比较两个xml内容是否相同?

y11111494 2010-01-15 09:50:41
现有a.xml和b.xml
如何用java比较两个xml是否相同?并记录不同的地方.


a.xml:

<?xmlversion="1.0" ?>
<A>
<a>a</a>
<b>b</b>
<c>c</c>
</A>

b.xml:

<?xmlversion="1.0" ?>
<A>
<a>a</a>
<bb>bb</bb>
<c>c</c>
</A>
...全文
2242 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuefeimengli2007 2011-08-29
  • 打赏
  • 举报
回复
XML比对有什么现成的好用的工具没有啊?
beyondCompare比较节点的属性顺序,我需要一个属性顺序不同,但是也认为是相同的。
sAS112UUUYY111 2010-01-26
  • 打赏
  • 举报
回复
有必要,写写
welllit 2010-01-25
  • 打赏
  • 举报
回复
beyondcompare
y11111494 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huntor 的回复:]
xmlunithttp://xmlunit.sourceforge.net/
Java codepublicvoid testForEquality()throws Exception {
String myControlXML="<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML="<msg><localId>2376</localId></msg>";
assertXMLEqual("comparing test xml to control xml", myControlXML, myTestXML);

assertXMLNotEqual("test xml not similar to control xml", myControlXML, myTestXML);
}publicvoid testIdentical()throws Exception {
String myControlXML="<struct><int>3</int><boolean>false</boolean></struct>";
String myTestXML="<struct><boolean>false</boolean><int>3</int></struct>";
Diff myDiff=new Diff(myControlXML, myTestXML);
assertTrue("pieces of XML are similar"+ myDiff, myDiff.similar());
assertTrue("but are they identical?"+ myDiff, myDiff.identical());
}publicvoid testAllDifferences()throws Exception {
String myControlXML="<news><item id=\"1\">War</item>"+"<item id=\"2\">Plague</item><item id=\"3\">Famine</item></news>";
String myTestXML="<news><item id=\"1\">Peace</item>"+"<item id=\"2\">Health</item><item id=\"3\">Plenty</item></news>";
DetailedDiff myDiff=new DetailedDiff(compareXML(myControlXML, myTestXML));
List allDifferences= myDiff.getAllDifferences();
assertEquals(myDiff.toString(),0, allDifferences.size());
}
XMLUnit for Java provides two JUnit extension classes, XMLAssert and XMLTestCase, and a set of supporting classes (e.g. Diff, DetailedDiff,Transform,SimpleXpathEngine,Validator,NodeTest) that allow assertions to be made about:

    * The differences between two pieces of XML
    * The outcome of transforming a piece of XML using XSLT
    * The evaluation of an XPath expression on a piece of XML
    * The validity of a piece of XML
    * Individual nodes in a piece of XML that are exposed by DOM Traversal

XMLUnit for Java can also treat HTML content (even badly-formed HTML) as valid XML to allow these assertions to be made about the content of web pages too.
[/Quote]


什么意思?
windgh 2010-01-25
  • 打赏
  • 举报
回复
如果仅仅是你的两个示例,简单,两个reader同时逐行循环比较就行
如果存在那种新增/删除的行,那就麻烦了,一个简单的想法,抛砖引玉吧:
先左后右,当两边不同时,循环右边到跟左边一致的行,有表示中间这段是右边的文件多出来的;
如果没有,回到开始的位置,左边的文件重复刚才的行为,还没有,表示这行改过,两边同时往下循环。
kamiomisuzu01 2010-01-25
  • 打赏
  • 举报
回复
文件输入流
string a=文件+MD5
String b=另一个文件+MD5
比较a和b
Red_Tiger 2010-01-22
  • 打赏
  • 举报
回复
如果你不是想做一个发杂的系统而只是想实现这个简单功能的话,我觉得你可以试试 Apache 的 betwixt 工具包。他可以把 XML 文件解析成为对应的 Bean 对象,然后你可以把两个解析出来的 Bean 对象进行 Equels 比较,发现不同的字段就返回这个字段信息。
具体这个工具怎么使用我在这里就不具体说明了,那样就太长了,只是给你一个参考意见,希望能够帮助你。
具体信息你在 Apache.org 官网查查,很详细。具体网址是:http://commons.apache.org/betwixt/
另外网上还有另一个类似的工具 XStream,他们之间的区别在于 XStream 的方法实现比 betwixt 更显得优雅,代码实现简洁清晰,但是不适合对大型 XML 文档进行处理,容易造成内存泄露。
feifeikub 2010-01-22
  • 打赏
  • 举报
回复
可以用Java验证的方法试试。
psyuhen 2010-01-22
  • 打赏
  • 举报
回复
思路:貌似跟CVS里面的那个比较差不多,是按行来比较,在相同的行,有相同的字符就判断它为相同的,否则为不同。

sj241040135 2010-01-22
  • 打赏
  • 举报
回复
不用做到svn那样的话,应该就简单多了。解析一下,判断一下就行了。
sAS112UUUYY111 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 y11111494 的回复:]
引用楼主 y11111494 的回复:
现有a.xml和b.xml
如何用java比较两个xml是否相同?并记录不同的地方.
a.xml:
XML code <?xmlversion="1.0"?> <A> <a>a </a> <b>b </b> <c>c </c> </A>
b.xml:
XML code <?xmlversion="1.0"?> <A> <a>a </a> <bb>bb </bb> <c>c </c> </A>


如果不用解析xml文件。
只是比较两个xml中的字符,最后,
将b.xml中与a.xml中不同的地方返回到字符串数组中。
有人知道思路吗?

[/Quote]



想法挺好
sunny2603 2010-01-21
  • 打赏
  • 举报
回复
学习学习
y11111494 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 y11111494 的回复:]
现有a.xml和b.xml
如何用java比较两个xml是否相同?并记录不同的地方.
a.xml:
XML code<?xmlversion="1.0"?><A><a>a</a><b>b</b><c>c</c></A>
b.xml:
XML code<?xmlversion="1.0"?><A><a>a</a><bb>bb</bb><c>c</c></A>
[/Quote]

如果不用解析xml文件。
只是比较两个xml中的字符,最后,
将b.xml中与a.xml中不同的地方返回到字符串数组中。
有人知道思路吗?
machiatto19881031 2010-01-20
  • 打赏
  • 举报
回复
路过的,进来学习学习
sAS112UUUYY111 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhang2chenggong 的回复:]
比较xml schema和比较lz的xml方法是一样的吗?
[/Quote]

xml schema 是什么?
y11111494 2010-01-20
  • 打赏
  • 举报
回复
有会的吗?
铁匠梁老师 2010-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 amdgaming 的回复:]
用软件 吧, beyondcompare 超级 强大。。
[/Quote]

鼎起,谁用谁舒服
zhang2chenggong 2010-01-19
  • 打赏
  • 举报
回复
比较xml schema和比较lz的xml方法是一样的吗?
zhentengai 2010-01-15
  • 打赏
  • 举报
回复
给你一个思路

解析成 树


然后对比相应节点!


支持自创.加油!
amdgaming 2010-01-15
  • 打赏
  • 举报
回复
用软件 吧, beyondcompare 超级 强大。。
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧