异常cvc-elt.1:尝试使用JAXB解组时无法找到元素'AsifXml'的声明

Mik*_*ith 5 java xsd jaxb xml-namespaces

尝试使用JAXB解组xml文档时,我一直收到以下错误.错误如下:

cvc-elt.1:找不到元素'AsifXml'的声明

unmarshall的代码是这样的:

    JAXBContext jc = JAXBContext.newInstance("asif_objects");
    Unmarshaller u = jc.createUnmarshaller();
    SchemaFactory sf = SchemaFactory.newInstance(
            javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = sf.newSchema(new File("ASIF_Schema1.1.6.xsd"));
    u.setSchema(schema);

    AsifXml doc 
        = (AsifXml)u.unmarshal(new FileInputStream("asif_small.xml"));
Run Code Online (Sandbox Code Playgroud)

我相信xsd文件的相关部分看起来像这样(省略了标签的打开和关闭,因为我不确定如何在网站上格式化它们:

?xml version="1.0" encoding="UTF-8"?
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:asif="http://www.website.com/ASIF" 
targetNamespace="http://www.website.com/ASIF" elementFormDefault="qualified"
attributeFormDefault="unqualified" version="1.1.6"

xs:element name="AsifXml"
    xs:complexType
Run Code Online (Sandbox Code Playgroud)

而我认为相关的XML就在这里:

AsifXml xmlns:AsifXml="http://www.website.com/ASIF"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.4" 
content="study"
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试使用谷歌搜索同样的错误,但似乎大多数响应都与我不使用的Web服务中的错误有关.我也想过,也许我在验证时遇到了问题,因为我在代理后面并且无法访问架构文档中给出的url,但是经过进一步的研究,我得到的印象是这些url实际上并不存在验证文件.我尝试了另一个不在代理服务器后面的网络并收到了同样的错误.

非常感谢任何有关此问题的帮助.

ska*_*man 4

在我看来,示例 XML 文件是假的。乍一看还不错,但其实没什么意义:

<AsifXml xmlns:AsifXml="http://www.website.com/ASIF">
Run Code Online (Sandbox Code Playgroud)

这声明了一个名为 的标记AsifXml,并声明了一个带有前缀也称为 的 XML 命名空间AsifXml。然而,两者并无任何关系。元素本身没有任何名称空间,这违反了架构。

请尝试以下示例,它应该可以工作:

<AsifXml xmlns="http://www.website.com/ASIF" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         version="1.1.4" 
         content="study">
Run Code Online (Sandbox Code Playgroud)

此示例表示该AsifXml元素具有名称空间http://www.website.com/ASIF,这是架构所期望的。

该样本可以等效地编码为:

<AsifXml:AsifXml xmlns:AsifXml="http://www.website.com/ASIF" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         version="1.1.4" 
         content="study">
Run Code Online (Sandbox Code Playgroud)

其含义相同,但这个版本令人困惑且冗长。

  • 啊,效果很好。非常感谢您的回答并帮助我更多地了解 XML 模式的工作原理。 (2认同)