Класс XSD в C ++ с использованием синтаксического анализатора xsd cxx-дерева. Методы, чтобы открыть XML из файла.

Я использую компилятор xsd 3.3.0 для анализа файла xsd (лучший друг xml) в классе C ++. (см. последнюю веб-ссылку)

Имя команды

xsd cxx-дерево (опции) file.xsd

(+ информация http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/)

Я видел несколько примеров, представленных codesnthesis, где они анализируют документ hello.xsd и очень легко создают файлы .hxx и .cxx.
У .hxx есть метод, чтобы открыть документ XML, создавая объект, где вы можете найти различные части XML, проверить его и т. Д …
.Hxx имеет такой код:

// Parse a URI or a local file.
//

::std::auto_ptr< ::hello_t >
hello (const ::std::string& uri,
::xml_schema::flags f = 0,
const ::xml_schema::properties& p = ::xml_schema::properties ());

Получается строка с именем файла

строка& uri = «hello.xsd»

и создайте объект, который вы используете в main.cxx.

Итак, я пытаюсь сделать то же самое с моим файлом xsd. Я использую компилятор xsd cxx-tree, но он не создает методы для «анализа URI или локального файла». Тогда я не могу создать объект из XML-файла в моей основной программе.

Я решаю некоторые проблемы компиляции, используя разные опции из документации компилятора CodeS (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml). Существуют разные варианты того, что вы хотите скомпилировать, как вы хотите это сделать и т. Д., Но я не могу найти какие-либо опции, чтобы включить методы, используемые для «разбора URI или локального файла».

Предоставляя больше информации, документы xml-xsd являются документами протокола CBML.

Спасибо за помощь!

2

Решение

Я использую этот продукт все время.

Вот пример того, что вы пытаетесь сделать (я думаю):

xsd cxx-tree hello.xsd

Который генерирует hello.hxx и hello.cxx, как вы сказали. Я думаю, что вам не хватает понимания того, как использовать эти файлы для загрузки файла XML (например, загрузка «локального файла»).

Мне нравится явно указывать программному обеспечению, где найти схему XSD. Следующий код не будет компилироваться, но я включил его для справки.

void load(const std::string &xml, const std::string &xsd) {
xml_schema::properties properties;
properties.no_namespace_schema_location(xsd);
// or, if you have a specific namespace you want to load, use
// props.schema_location("which namespace", xsd);
try {
std::auto_ptr< ::hello_t> xml_file = hello(xml, 0, props);
// operate on the xml_file via "->" notation
std::cout << xml_file->hello() << std::endl;

} catch (const ::xml_schema::exception &e) {
std::ostringstream os;
os << e.what();
// report the error as you see fit, use os.str() to get the string
}

}

Не забудьте связать *.cxx подать в ваш *.cpp файлы.

Если это не то, что вы хотели, дайте мне знать в комментариях, и я могу попытаться помочь вам еще.

0

Другие решения

Я нашел решение сам!

Я использовал разные варианты компиляции. Я использовал опцию «—root-element library», и это вызвало то, что методы «Разобрали URI или локальный файл». не был создан

Я удалил эту опцию и добавил «—root-element-all», который создает методы разбора для всех объектов принципала!

Теперь моя программа работает! Спасибо!

0