我有一个给定的 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">
如果我在线或在 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 ”)并且没有验证一切正常!
那么名称空间声明有什么问题呢?