Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Парсинг XSD С++

Привет всем. Возникла задача, на основе XML и XSD динамически подгружать интерфейс. Написал xml и xsd файл к этой xml. Загружаю xsd файл в память, проверяю по xsd схеме xml файл,с помощью библиотеки libxml2, выводит все хорошо или есть где нибудь ошибка, но к примеру допустим все хорошо. Следующим этапом провожу парсинг xml файла средствами Qt (QXmlReader), создаю необходимые формы. Теперь необходимо, как то достать из xsd схемы значения ограничения диапазона, типы и другие атрибуты. К примеру в xsd схеме хранится диапазон для формы, пример маленького кусочка большого файла привел ниже:

Вот мне нужно из определённого элемента в XSD достать: 1) тип integer 2) minInclusive(мин значение диапазона) - 0 3) maxInclusive(максимальное значение диапазона) - 120
На основе этих значение для формы к примеру spinBox будут заданы ограничения 1) если получили тип integer в результате парсинга xsd, будет создан объект класса QIntValidate (для делегата) и будет установлен setRange(0,120); для этого spinBox
Возможно есть ли какие нибудь библиотеки для парсинга самой XSD, а не только XML? Может кто то покажет пример xsd в libxml2, но я не нашел. Возможно кто то знает хорошие примеры, как это можно сделать или делал это когда-нибудь средствами Qt.


Ответ

Схема XSD - это тоже файл в формате XML. Вы знаете его структуру. Можете тем-же парсером его парсить.
Например, ищете узел с тэгом "xs:element" и со свойством "name" равному "age". В нём - узел с тэгом "xs:simpleType". В нём узел с тегом "xs:restriction". В нем в узлах с тегами "xs:minInclusive" и "xs:maxInclusive" берёте из свойства "value" необходимые вам значения ограничений.

Комментариев нет:

Отправить комментарий