web-dev-qa-db-de.com

cvc-elt.1: Die Deklaration des Elements 'MyElement' kann nicht gefunden werden

Ich versuche ein wirklich einfaches XML mit xsd zu validieren, aber aus irgendeinem Grund bekomme ich diesen Fehler ... Ich bin wirklich dankbar, wenn mir jemand erklären kann, warum.

XML-Datei

<?xml version="1.0" encoding="utf-8"?> 
<MyElement>A</MyElement>

XSD-Datei

<?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>
28
Mitko Mitev

Ihr Schema bezieht sich auf den Ziel-Namespace http://www.example.org/Test. Es definiert also ein Element mit dem Namen MyElement in diesem Ziel-Namespace http://www.example.org/Test. Ihr Instanzdokument hat jedoch ein Element mit dem Namen MyElement in kein Namespace . Aus diesem Grund sagt der validierende Parser, dass er keine Deklaration für dieses Element finden kann. Sie haben kein Schema für Elemente in keinem Namespace angegeben.

Sie müssen entweder das Schema ändern, um überhaupt keinen Ziel-Namespace zu verwenden, oder Sie müssen die Instanz ändern, um z. <MyElement xmlns="http://www.example.org/Test">A</MyElement>.

29
Martin Honnen

Ich hatte diesen Fehler für mein XXX-Element und der Grund dafür war, dass meine XSD falsch formatiert war (javax.xml.bind v2.2.11). Ich denke, es wird ein älteres XSD-Format verwendet, aber ich habe mich nicht darum gekümmert.

Meine erste falsche XSD war wie folgt:

<xs:element name="Document" type="Document"/>
...
<xs:complexType name="Document">
    <xs:sequence>
        <xs:element name="XXX" type="XXX_TYPE"/>
    </xs:sequence>
</xs:complexType>

Das gute XSD-Format für meine Migration war das Folgende:

<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"/>

Und so weiter für jeden ähnlichen XSD-Knoten.

0
Michael Fayad