CVC-elt.1:找不到元素的声明“MyElement”(cvc-elt.1: Cannot fi

2019-07-03 17:18发布

我试图验证使用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>

Answer 1:

Your schema is for its target namespace http://www.example.org/Test so it defines an element with name MyElement in that target namespace http://www.example.org/Test. Your instance document however has an element with name MyElement in no namespace. That is why the validating parser tells you it can't find a declaration for that element, you haven't provided a schema for elements in no namespace.

You either need to change the schema to not use a target namespace at all or you need to change the instance to use e.g. <MyElement xmlns="http://www.example.org/Test">A</MyElement>.



Answer 2:

我有这个错误我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节点。



文章来源: cvc-elt.1: Cannot find the declaration of element 'MyElement'