【发布时间】:2013-03-15 00:44:51
【问题描述】:
我有一个给定的 xsd 文件并给出了该文件的示例。 xsd 与http://www.forum-datenaustausch.ch/hospitalinvoicerequest_400.xsd 非常相似,但在根下方多了一个元素。
问题是,如果我根据架构验证给定的 xml(使用 moxy 作为 JAXBCOntextFactory)我得到了这个错误:
enterCaused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 221; cvc-elt.1: Cannot find the declaration of element 'invoice:request'.
invoice:request 是 xml 开始的根元素:
<invoice:request role="production" xmlns:invoice="http://www.medidata.ch/QO/XSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.medidata.ch/QO/XSD QO_MDInvoiceRequest_400.xsd">
如果我根据架构online 或在 Eclipse(右键单击验证)中验证 xml,一切正常。如果我将命名空间从
xmlns:invoice="http://www.medidata.ch/QO/XSD"
到
xmlns:invoice="http://www.xmlData.ch/xmlInvoice/XSD"
错误消失了 - 但由于附加元素,我得到了另一个错误。 有了这个命名空间声明,我什至无法在没有验证的情况下读取内容:root 的 getter 返回 null。使用替代声明 ("http://www.xmlData.ch/xmlInvoice/XSD") 且无需验证一切正常!
那么名称空间声明有什么问题?
【问题讨论】: