我必须比较XML数据。有两个来源 -
我没有看到任何简单的方法在同一个类中转换它们并使用equals方法。
使用Web Services的类是自动生成的,WSDL根本不简单。
所以我从Web Service读取响应,读取相应的文件,将它们转换为具有相同格式的String(删除空格,\ n \ r \ n字符等),然后使用String.equals()方法。< / p>
问题是Web服务的空标签是下一个写的:
<EmptyTag/>
但提供的文件包含这种空标记:
<EmptyTag></EmptyTag>
好的,有一种方法可以手动准备所有提供的文件,但我不喜欢它。 谁知道,如何将空标签转换为相同的样式? 如果有任何想法如何简化处理 - 欢迎您;)
更新
我不解析xml。 只读取文件的数据并将其转换为预期的格式。 Web Service响应中的对象结构将以下一种方式转换为xml字符串:
marshaller.marshal(new JAXBElement<response_class_name>(new QName("response_class_name"),
response_class_name.class, response_object), stringWriter);
答案 0 :(得分:5)
对于Java,我会使用XMLUnit来比较文件,因为它使用结构比较xml文件,而不是字符串(它可能会也可能不会忽略空格,具体取决于设置)。
答案 1 :(得分:2)
您可以使用Java的正则表达式模块将所有"<([^/]+?)/>"
替换为"<\\1></\\1>"
。这会将第一种形式(“&lt; EmptyTag /&gt;”)扩展为第二种形式(“&lt; EmptyTag&gt;&lt; / EmptyTag&gt;”)。
答案 2 :(得分:2)
您可以预先将"<(\\w+)([^>]*)?>\\s*</\\1>"
替换为"<$1$2 />"
修改或"<(\\w+)( [^/>]*)?/>"
"<$1$2></$1>"
;)
答案 3 :(得分:1)
程序xmllint可以解决这个问题:
$ echo '<EmptyTag></EmptyTag>' | xmllint -
<?xml version="1.0"?>
<EmptyTag/>
答案 4 :(得分:1)
有两种选择:
答案 5 :(得分:0)
我可能会使用XSLT将两个xml文件转换为相同的格式,但我不知道这是否是最简单的方法。可能有编辑器可以为您进行格式化。