XML без проверки по нескольким XSD загружает только один файл в fGrammarDescription - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь проверить XML на нескольких XSD, и я придумал этот код. Но проблема в том, что когда я использую отладчик в методе validateXML для проверки объекта схемы, я вижу только один файл в fGrammarDescription, который всегда является первым файлом в имени схемы.

Итак, наконец, теги из другие xsd не распознаются и, следовательно, не проходят проверку.

public class TestMain {
    public static void main(String[] args) {
        TestMain testMain = new TestMain();
        String schemaName1 = "1.xsd";
        String schemaName2 = "2.xsd";
        String schemaName3 = "3.xsd";
        String schemaName4 = "4.xsd";
        String schemaName5 = "5.xsd";
        String xmlName = "C:\\Users\\nagesingh\\IdeaProjects\\test.xml";

        Schema schema = testMain.loadSchema(schemaName1, schemaName2, schemaName3,schemaName4,schemaName5);
        Document document = parseXmlDom(xmlName);
        validateXml(schema, document);
    }

    public static void validateXml(Schema schema, Document document) {
        try {
            // 3. Get a validator from the schema.
            Validator validator = schema.newValidator();
            System.out.println("Validator Class: " + validator.getClass().getName());

            // validating the document against the schema
            validator.validate(new DOMSource(document));
            System.out.println("Validation passed.");

        } catch (Exception e) {
            // catching all validation exceptions
            System.out.println(e.toString());
        }
    }

    public Schema loadSchema(String... schemaFileName) {
        Schema schema = null;
        try {
            String language = XMLConstants.W3C_XML_SCHEMA_NS_URI;
            SchemaFactory factory = SchemaFactory.newInstance(language);
            List<Source> sourceList = new ArrayList<>();
            List<String> stringList = Arrays.asList(schemaFileName);
            for (String eachSchemaFile : stringList){
                sourceList.add(new StreamSource(getClass().getClassLoader().getResource("xml/"+eachSchemaFile).toExternalForm()));
            }

            schema = factory.newSchema(sourceList.stream().toArray(Source[]::new));
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return schema;
    }

    public static Document parseXmlDom(String xmlName) {
        Document document = null;
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            document = builder.parse(new File(xmlName));
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return document;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...