我正在尝试使用xsd验证一个非常简单的xml,但由于某种原因我得到了这个错误。 如果有人能解释我原因,我真的很感激。
XML文件
<?xml version="1.0" encoding="utf-8"?>
<MyElement>A</MyElement>
XSD文件
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Test"
xmlns:tns="http://www.example.org/Test"
elementFormDefault="qualified">
<simpleType name="MyType">
<restriction base="string"></restriction>
</simpleType>
<element name="MyElement" type="tns:MyType"></element>
</schema>
答案 0 :(得分:31)
您的架构是针对其目标命名空间http://www.example.org/Test
的,因此它在该目标命名空间MyElement
中定义了名为http://www.example.org/Test
的元素。但是,您的实例文档在无名称空间中有一个名为MyElement
的元素。这就是为什么验证解析器告诉你它找不到该元素的声明,你没有为没有命名空间的元素提供模式。
您需要更改架构以完全不使用目标命名空间,或者您需要更改要使用的实例,例如<MyElement xmlns="http://www.example.org/Test">A</MyElement>
。
答案 1 :(得分:0)
我的XXX元素出现此错误,原因是我的XSD根据javax.xml.bind v2.2.11格式错误。我认为它使用较旧的XSD格式,但我没有打算确认。
我最初错误的XSD与以下内容类似:
<xs:element name="Document" type="Document"/>
...
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="XXX" type="XXX_TYPE"/>
</xs:sequence>
</xs:complexType>
我迁移成功的优秀XSD格式如下:
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element ref="XXX"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
<xs:element name="XXX" type="XXX_TYPE"/>
对于每个类似的XSD节点都是如此。
答案 2 :(得分:0)
我在使用Maven的Eclipse中遇到同样的错误,并附带了其他信息
schema_reference.4: Failed to read schema document 'https://maven.apache.org/xsd/maven-4.0.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
这是在复制新控制器及其Thymeleaf示例中的界面之后进行的。老实说,无论我多么谨慎,我仍然不知所措。我很幸运地右键单击了该项目,然后单击了“ Maven和更新项目”,从而解决了问题。
答案 3 :(得分:0)
在做出马丁建议的更改之后,我仍然遇到相同的错误。我必须对解析代码进行其他更改。我正在通过DocumentBuilder解析XML文件,如oracle docs所示: https://docs.oracle.com/javase/7/docs/api/javax/xml/validation/package-summary.html
// parse an XML document into a DOM tree
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("example.xml"));
问题是默认情况下DocumentBuilder不支持名称空间。以下其他更改解决了该问题:
// parse an XML document into a DOM tree
DocumentBuilderFactory dmfactory = DocumentBuilderFactory.newInstance();
dmfactory.setNamespaceAware(true);
DocumentBuilder parser = dmfactory.newDocumentBuilder();
Document document = parser.parse(new File("example.xml"));