Условная проверка XML против нескольких XSD - игнорируйте ошибки проверки для определенных XSD и не пройдите проверку только для некоторых XSD - PullRequest
1 голос
/ 14 апреля 2019

Справочная информация : использование XML из другой системы.Разбор, проверка и сохранение в собственной базе данных.
Поскольку не все поля имеют отношение к моей системе, проверка Схемы только для некоторых типов элементов. Если проверка завершится неудачно, прекратите выполнение.
Остальные типы, даже если проверка не пройдена, все равно переходят ксохраняются в БД.

Я проверяю XML по списку XSD (один основной XSD с включениями для нескольких XSD). В настоящее время в моем коде Validator проверяет соответствие всем включенным XSD .
Однако, требование - проверка схемы должна быть обязательной для определенных XSD.Для некоторых других, даже если тип элемента XML не соответствует типу XSD, не произойдет сбой. Как это сделать?

Например, Say, Person.xsd & Product.xsd isОбязательно для проверки схемы.Проверка в Address.xsd & Phone.xsd может быть проигнорирована.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="com.demo.devika" xmlns:tns="com.demo.devika" elementFormDefault="qualified">
    <xsd:include schemaLocation="Address.xsd" />
    <xsd:include schemaLocation="Phone.xsd" />
    <xsd:include schemaLocation="Product.xsd" />

    <xsd:element name="Person" type="tns:Person_Type"/>
    <xsd:complexType name="Person_Type">
        <xsd:sequence>
            <xsd:element name="FirstName" type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="LastName" type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="Address" type="tns:Address_Type" minOccurs="1" maxOccurs="unbounded"/>
            <xsd:element name="Phone" type="tns:Phone_Type" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="Product" type="tns:Product_Type" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

Метод проверки XML

public boolean execute(InputStream inputXML) throws XMLStreamException, SAXException, IOException {

        // Creating Source array for Schema
        List<Source> schemaSources = schemaFiles.stream().map(schemaFile -> new StreamSource(schemaFile))
                .collect(Collectors.toCollection(ArrayList::new));

        try {
            SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

            schemaFactory.setFeature(Constants.XERCES_FEATURE_PREFIX + Constants.NAMESPACE_GROWTH_FEATURE,
                    Boolean.TRUE);

            Schema schemaGrammar = schemaFactory
                    .newSchema(schemaSources.toArray(new StreamSource[schemaSources.size()]));

            Validator schemaValidator = schemaGrammar.newValidator();

            schemaValidator.validate(new StreamSource(inputXML));
            return true;

        } catch (SAXException | IOException ex) {
            throw ex;
        } finally {
            inputXML.close();
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...