我得到一个"意想不到的元素"使用NIST CPE CPE 2.3 XML Schema Definition时使用时出错。
返回带有此错误的JAXBException:
unexpected element (uri:"", local:"head"). Expected elements are <{http://cpe.mitre.org/dictionary/2.0}cpe-item>,<{http://cpe.mitre.org/dictionary/2.0}cpe-list>
注意:
Unmarshalling Code非常简单:
URL url = new URL("http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream plainXMLCPE = connection.getInputStream();
JAXBContext jaxbContext = JAXBContext.newInstance(ListType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<ListType> cpeList = (JAXBElement<ListType>) jaxbUnmarshaller.unmarshal(plainXMLCPE);
ListType thelist = cpeList.getValue();
与类似问题不同;我不认为这是一个带有元素名称的大写/小写问题,因为元素名称&#34; head&#34;根本不会出现在任何地方。我不完全理解为什么uri被标记为&#34;&#34;在错误消息中。
我试图手动将@XmlRootElement注释添加到JaxB创建的类中以使其无效。它自动创建了一个具有正确名称空间的package-info.java。
答案 0 :(得分:1)
这里似乎有两个问题:
<head>
元素来自哪里?和 1.的答案是您可能从浏览器中错误地保存了XSD,导致额外的HTML <head/>
标记被写入您认为是XSD文件的内容。
在Firefox中,例如,当您执行文件 - &gt;将页面另存为时,您将进入下拉菜单&#34;另存为类型&#34;并选择网页,仅限XML (这将保存没有额外的HTML),而不是网页完成(这类似于你必须做的)。
如果您打开XSD,您认为自己正在保存并仔细查看,您会在本地副本中看到标记。
这样很容易修复。我知道IE有类似的选择,并且最近没有检查过Chrome。
至于2.但是,我不确定你是如何成功完成JAXB生成的。我只是尝试重新创建它几次(使用EclipseLink MOXy)但是我无法在那里使用<head/>
标记。
如果您回答如何从Eclipse配置JAXB,我可以帮助我尝试更新我的答案。