Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法通过代码找到简单架构验证的元素错误声明_Java_Xml_Xsd_Sax_Saxparser - Fatal编程技术网

Java 无法通过代码找到简单架构验证的元素错误声明

Java 无法通过代码找到简单架构验证的元素错误声明,java,xml,xsd,sax,saxparser,Java,Xml,Xsd,Sax,Saxparser,我在使用javax.XML.validation.schema的模式进行XML验证时遇到问题 我将一个模式分为两个文件。 第一个: <xs:schema targetNamespace="http://sample/AAA/1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:complexType name="BBB">

我在使用javax.XML.validation.schema的模式进行XML验证时遇到问题

我将一个模式分为两个文件。 第一个:

<xs:schema targetNamespace="http://sample/AAA/1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <xs:complexType name="BBB">
        <xs:attribute name="firstName" use="optional">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="lastName" use="optional">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:schema>
xsdStreamSource是一个包含两个StreamSources(每个XSD文件一个)的数组。 然后,我尝试用代码验证示例XML:

SAXParserFactory parserFactory = SAXParserFactory.newInstance(SAX_PARSER_FACTORY_CLASS, null);
parserFactory.setNamespaceAware(true);
parserFactory.setSchema(schema);

SAXParser saxParser = parserFactory.newSAXParser();
SchemaValidatorErrorHandler errorHandler = new SchemaValidatorErrorHandler();
errorHandler.setLines(new String(content, "UTF-8").split("\\n"));
saxParser.parse(new BOMInputStream(new ByteArrayInputStream(content)), errorHandler);
但是,errorHandler会报告错误:

/AAA[1][cvc elt.1.a:找不到元素“AAA”的声明。]


为了从多个文件加载具有相同名称空间的模式,我们必须在创建模式时启用其他功能

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI, SAX_PARSER_FACTORY, null);
factory.setFeature(Constants.XERCES_FEATURE_PREFIX + Constants.NAMESPACE_GROWTH_FEATURE, true);
factory.setResourceResolver(new SchemeXsdResolver());
return factory.newSchema(schemas);

否则,将只加载具有此名称空间的第一个文件,并跳过第二个文件。

我使用
javahu.unideb.inf.validator.SchemaValidator检查了XML/XSD,XSD按预期工作。但是,无法帮助您使用Java代码。
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI, SAX_PARSER_FACTORY, null);
factory.setResourceResolver(new SchemeXsdResolver());
Schema schema = factory.newSchema(xsdStreamSource);
SAXParserFactory parserFactory = SAXParserFactory.newInstance(SAX_PARSER_FACTORY_CLASS, null);
parserFactory.setNamespaceAware(true);
parserFactory.setSchema(schema);

SAXParser saxParser = parserFactory.newSAXParser();
SchemaValidatorErrorHandler errorHandler = new SchemaValidatorErrorHandler();
errorHandler.setLines(new String(content, "UTF-8").split("\\n"));
saxParser.parse(new BOMInputStream(new ByteArrayInputStream(content)), errorHandler);
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI, SAX_PARSER_FACTORY, null);
factory.setFeature(Constants.XERCES_FEATURE_PREFIX + Constants.NAMESPACE_GROWTH_FEATURE, true);
factory.setResourceResolver(new SchemeXsdResolver());
return factory.newSchema(schemas);