![](/img/trans.png)
[英]How to generate self-closing tag <tag/> for empty element in XML using JAXB
[英]Replace XML self-closing tag with empty one
我必须比较XML数据。 有两个来源 -
我没有看到任何简单的方法来在同一个类中转换它们并使用equals方法。
使用Web服务的类是自动生成的,WSDL根本不简单。
所以我从Web Service读取响应,读取相应的文件,将它们转换为具有相同格式的String(删除空格,\\ n \\ r \\ n字符等),然后使用String.equals()方法。
问题是Web服务的空标签是下一个写的:
<EmptyTag/>
但提供的文件包含这种空标记:
<EmptyTag></EmptyTag>
好的,有一种方法可以手动准备所有提供的文件,但我不喜欢它。 谁知道,如何将空标签转换为相同的样式? 如果有任何想法如何简化处理 - 欢迎你;)
UPDATE
我不解析xml。 只读取文件的数据并将其转换为预期的格式。 Web Service响应中的对象结构将以下一种方式转换为xml字符串:
marshaller.marshal(new JAXBElement<response_class_name>(new QName("response_class_name"),
response_class_name.class, response_object), stringWriter);
对于Java,我会使用XMLUnit来比较文件,因为它使用它们的结构比较xml文件,而不是字符串(它可能会也可能不会忽略空格,具体取决于设置)。
您可以使用Java的正则表达式模块将所有出现的"<([^/]+?)/>"
替换为"<\\\\1></\\\\1>"
。 这会将第一种形式(“<EmptyTag />”)扩展为第二种形式(“<EmptyTag> </ EmptyTag>”)。
你可以预先用"<$1$2 />"
替换"<(\\\\w+)([^>]*)?>\\\\s*</\\\\1>"
编辑或"<(\\\\w+)( [^/>]*)?/>"
与"<$1$2></$1>"
为其他方面;)
程序xmllint可以解决这个问题:
$ echo '<EmptyTag></EmptyTag>' | xmllint -
<?xml version="1.0"?>
<EmptyTag/>
有两种选择:
我可能会使用XSLT将两个xml文件转换为相同的格式,但我不知道这是否是最简单的方法。 可能有编辑器可以为您进行格式化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.