Страницы

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

четверг, 2 апреля 2020 г.

Парсинг XSD С++

#cpp #qt #xml #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. 
    


Ответы

Ответ 1



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

Ответ 2



Посмотрите "CodeSynthesis XSD", может подойдёт. Есть более мощный продукт Altova XSD Editor (коммерческий), тоже c++ умеет генерить

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

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