1

JDOM の使用時にエラーが発生する

org.jdom2.input.JDOMParseException: 4 行目のエラー: cvc-elt.1: 要素 'rootElement' の宣言が見つかりません。

私はxsd menu.xsdを持っています

<?xml version="1.0" encoding="utf-8"?>
<xs:schema version="1.0"
           targetNamespace="http://www.w3schools.com/menu"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns="http://www.w3schools.com/menu"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="rootElement"  type="xs:string"/>
</xs:schema>

および xml menu.xml

<?xml version="1.0"?>
<rootElement xmlns="http://www.w3schools.com/menu"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3schools.com/menu menu.xsd">
</rootElement>

使用して

public class RunXml
{
    public static void main(String[] args) throws JDOMException, IOException
    {
        SAXBuilder builder = new SAXBuilder(XMLReaders.XSDVALIDATING);
        File    xml = new File("xml/menu.xml");
        InputStream inputStream = new FileInputStream(xml);
        Document document = builder.build(inputStream);
    }
}

次はファイルです。どうしたの?

4

3 に答える 3

1

問題の一部は、JDOM の build() メソッドへの入力ソースに関連する「難読化」です。ファイルの値を build() メソッドに送信する前に InputStreams に変換するという、よくある悪い習慣のように見えることを行っています。"xml/menu.xml"実際、文字列値を File オブジェクトに変換する必要さえありません。ただ行う:

SAXBuilder builder = new SAXBuilder(XMLReaders.XSDVALIDATING);
Document document = builder.build("xml/menu.xml");

String 値"xml/menu.xml"はシステム ID であり、SAX パーサーはデフォルトで、SystemID が のようなものであると解釈しますfile://./xml/menu.xml。次に、スキーマを検索するときに、menu.xsdその URI を基準にしてスキーマを検索し、file://./xml/menu.xsd を見つけます。

ビルド メソッドに InputStream インスタンスを指定すると、InputSource に関連付けられたシステム ID がないため、menu.xsdファイルを見つけるために検索できる場所がありません。

build(...) メソッドの InputStream および Reader バージョンは、他に選択肢がない場合にのみ使用してください。これらのメソッドを使用する場合は、システム ID も指定できるバージョンを使用するようにしてください。

この問題を回避しやすくするために、これらのメソッドのドキュメントを更新する必要があります。

于 2013-08-22T16:21:27.320 に答える
1

xsd が見つかりませんでした。問題は次のように解決されました:

File xsdfile = new File("xml/menu.xsd");
XMLReaderJDOMFactory schemafac = new XMLReaderXSDFactory(xsdfile);
SAXBuilder builder = new SAXBuilder(schemafac);
于 2013-08-22T07:51:54.000 に答える
-1
<rootElement xmlns="http://www.w3schools.com/menu"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3schools.com/menu menu.xsd">
</rootElement>

xmlのこの場所で

<rootElement xmlns="http://www.w3schools.com/menu"

xsdで

targetNamespace="http://www.w3schools.com/menu"

有効な URI を設定する

于 2013-08-22T09:01:41.150 に答える