0

内部で別のXSDを参照するXSDに対してXMLを検証しようとしています(includeステートメントを使用)。

なので、

<xs:include schemaLocation="Schema2.xsd"/>

xsd(schema1.xsd)に対してXMLを検証している間、次のようになります。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder;
    try {
        builder = factory.newDocumentBuilder();

        Document document = builder.parse(new InputSource(new StringReader(
                inputXml)));
        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();
        Source src = new DOMSource(document);
        Result xmlFile = new StreamResult(new File("xmlFileName.xml"));
        aTransformer.transform(src, xmlFile);
    } catch (Exception e) {
        // TODO: handle exception
    }

    File xmlFile = new File("xmlFileName.xml");
    SchemaFactory factory1 = SchemaFactory
            .newInstance("http://www.w3.org/2001/XMLSchema");

    File schemaLocation = new File("F:\\Project\\Automation\\XSDs\\schema1.xsd");
    Schema schema = factory1.newSchema(schemaLocation);

    Validator validator = schema.newValidator();

    Source source = new StreamSource(xmlFile);

    try {
        validator.validate(source);
        System.out.println(xmlFile.getName() + " is valid.");
        isXmlValid = true;
    } catch (SAXException ex) {
        System.out.println(xmlFile.getName() + " is not valid because ");
        System.out.println(ex.getMessage());
        isXmlValid = false;
    }

「cvc-datatype-valid.1.2.1:'True'は'boolean'の有効な値ではありません」というエラーが表示されます。

これは、schema1.xsdが参照しているschema2.xsdで定義されている要素用です。

私が何か間違ったことをしているのか教えてください。

4

1 に答える 1

1

ケースの問題が発生しています。「true」はxsd:booleanの有効な値ですが、「True」(これは明らかにXMLドキュメントにあるものです)はそうではありません。

ここでの応答(xsd:boolean要素タイプは「true」を受け入れますが「True」は受け入れません。どうすればそれを受け入れることができますか?)は、列挙値に基づいていくつかの追加情報と可能な代替ソリューションを提供します(Trueをtrueに変更できない場合) )。

于 2012-06-07T17:55:32.653 に答える