0

次のコードのチャンクを使用して、XML スキーマに対して単純な XML ファイルを検証しようとしています。例外が発生しています

org.xml.sax.SAXParseException: cvc-elt.1: 
    Cannot find the declaration of element 'Applications'

そして、なぜそれができるのか誰かが何か知っているかどうか疑問に思っていました. (ロード後のスキーマの内容を見てみると、スキーマが適切にロードされていることを示すものは何もなく、一連の文法オブジェクトまたはそのようなものが表示されます。それでしょうか? ロードしようとすると存在しないファイル名を持つスキーマ、それは私にファイルが見つからないという例外を与えます...そのため、正しいファイル名が与えられたときに正しいスキーマを見つけています)

public void getPriceSummaryInfo(){
        Document doc = null;
        try {
            File fXmlFile = new File("testXML.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            doc = dBuilder.parse(fXmlFile);
        } 
        catch (Exception e) {
            e.printStackTrace();
        }

        try {
        Schema schema = getSchema("testSchema.xsd");
        Validator validator = schema.newValidator();
        validator.validate(new DOMSource(doc));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    private Schema getSchema (String xsdPath) throws Exception {
        assert xsdPath != null : "XML schema path is null.";
        SchemaFactory fact = 
                SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

        Schema schema;
        try {
            schema = fact.newSchema(new StreamSource(new File(xsdPath)));
        }
        catch (SAXException e) {
            throw new Exception(
                    "Unable to find target schema to validate XML.", e);
        }
        return schema;
    } 

xml および xsd ファイルは次のとおりです。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.randomthing.com"
            xmlns="http://www.randomthing.com"
            elementFormDefault="qualified">

    <xsd:element name="Applications">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Application" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Application">
        <xsd:annotation>
            <xsd:documentation>
             blah
            </xsd:documentation>
        </xsd:annotation>
       <xsd:complexType>
            <xsd:attribute name="id" type="xsd:long" use="required"/>
            <xsd:attribute name="name" type="xsd:string" use="required"/>
            <xsd:attribute name="order" type="xsd:long" use="required"/>
        </xsd:complexType>    
    </xsd:element>
</xsd:schema>  



<?xml version="1.0" encoding="UTF-8"?>
<Applications xmlns ="http://www.randomthing.com"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.randomthing.com testSchema.xsd">

    <Application id="3" name="Blah" order="2">
    </Application>
</Applications>

ポインタをいただければ幸いです!ありがとう

4

1 に答える 1

1

名前空間を使用してドキュメントを解析する必要があります。読み込み時に失われます。

dbFactory.setNamespaceAware(true);
于 2012-06-13T23:34:48.357 に答える