【发布时间】:2011-05-09 15:36:54
【问题描述】:
我必须比较 XML 数据。有两个来源-
- 网络服务
- XML 文件
我没有看到任何简单的方法可以将它们转换为相同的类并使用 equals 方法。
使用 Web 服务的类是自动生成的,WSDL 一点也不简单。
所以我从 Web 服务读取响应,读取相应文件,将它们转换为具有相同格式(删除空格、\n\r 字符等)的字符串,然后使用 String.equals() 方法。
问题是 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);
【问题讨论】:
-
你可以用正则表达式替换来做到这一点,但我对我的正则表达式技能没有足够的信心来发布答案。
-
你是如何解析 XML 的?我曾经使用过的每个 XML 解析库都以不透明的方式处理这种情况(这意味着您永远不必自己处理它)。如果您自己解析 XML(使用 substring、indexof 等),那就是您的问题了。
-
@MusiGenesis - 请查看更新后的问题。
-
如果我理解您的编辑,那么您根本没有解析 XML 响应 - 您只是将响应作为整个字符串进行检查。相反,您应该使用解析器来提取
<EmptyTag>元素的内部内容;无论标签的结构如何(<EmptyTag/>或<EmptyTag></EmptyTag>),它都应该正确返回 "",或者如果标签甚至不存在,它将返回 null。 -
Underscore-java 库可以读取 xml 到 map 并从 map 生成 xml。支持自闭标签。