46

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>
4

4 に答える 4

42

スキーマはそのターゲット名前空間用であるため、そのターゲット名前空間に名前http://www.example.org/Testを持つ要素を定義しMyElementますhttp://www.example.org/Test。ただし、インスタンスドキュメントには、名前空間のない名前MyElementの要素があります。そのため、検証パーサーは、その要素の宣言が見つからないことを通知します。名前空間のない要素のスキーマを指定していません。

ターゲット名前空間をまったく使用しないようにスキーマを変更するか、たとえばを使用するようにインスタンスを変更する必要があります<MyElement xmlns="http://www.example.org/Test">A</MyElement>

于 2012-11-10T10:20:28.543 に答える
4

マーティンによって上記で提案された変更を行った後、私はまだ同じエラーを受け取っていました。解析コードに追加の変更を加える必要がありました。オラクルのドキュメントに示されているように、DocumentBuilderを介してXMLファイルを解析していました: 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"));
于 2020-12-15T14:59:01.407 に答える
1

XXX要素でこのエラーが発生しました。これは、XSDがjavax.xml.bindv2.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ノードについても同様です。

于 2018-05-25T19:15:48.803 に答える
0

EclipseとMavenで同じエラーが発生し、追加情報が表示されます

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とUpdate Projectをクリックして、問題を解決しました。

于 2020-02-16T20:29:30.213 に答える