【发布时间】:2018-05-18 07:31:26
【问题描述】:
我正在以这种格式从 bugzilla 下载 xml:
<bugzilla>
<bug>
<bug_id>111</bug_id>
<short_desc>text 1 & 2</short_desc>
</bug>
<bug>
<bug_id>222</bug_id>
<short_desc>text 2 <this is a short desc> </short_desc>
</bug>
</bugzilla>
如您所见,当我尝试使用 jaxb 解析器解析它时,它失败的原因有两个:
第一个标签内的&(需要改成
&amp;错误信息:The entity name must immediately follow the '&' in the entity reference.<this is a short desc>文本的大小写相同。错误信息The entity name must immediately follow the '&' in the entity reference.
但我不明白的是这些都是有效标签的内容。那么为什么要为这些内容运行验证逻辑。在第二种情况下,它不仅仅是一个标记为<thisisashortdesc>,它可能会引发实际的有效错误,说明缺少结束标记。但这种情况下有空格。
找到下面使用过的代码g:
文件file = new File("C:\test\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Bugzilla.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Bugzilla bugzillaReport = (Bugzilla) jaxbUnmarshaller.unmarshal(file);
无论如何解决这个问题。
【问题讨论】:
-
这不是验证,而是格式良好。这不是关于验证是否尊重某些约束,而是关于是否可以阅读此内容。 XML 文档必须是格式正确的,否则解析器将无法知道应该表示什么数据以及如何从那里继续解析,换句话说,它无法完成预期的工作,所以假装没有意义。验证可以跳过,而且经常是这样。格式正确是必须的,因为它是解析的一部分。
-
@kumesana 谢谢你的信息..
标签: java xml parsing xsd xml-parsing