Я опишу три способа жесткого кодирования вашего XSD в вашей программе:
- путем загрузки XSD из пути к файлу (это то, что ваша примерная программа делает прямо сейчас)
- путем загрузки XSD из строки (это то, что вы просите)
- путем загрузки XSD из предварительно скомпилированного двоичного файла
Загрузка XSD из пути к файлу
Борис Колпаков предлагает в своем блоге 1014 *, чтобы приложения сами предоставляли файлы схемы XSD, а не искали файлы схемы через xsi: schemaLocation или xsi: noNamespaceSchemaLocation атрибуты найдены в XML-файле.
В сообщении блога есть ссылка на load-grammar-dom , пример программыв свободном доступе), которая использует функцию xercesc :: DOMLSParser :: loadGrammar :
user@linux:~$ load-grammar-dom
usage: load-grammar-dom [test.xsd ... ] [test.xml ...]
user@linux:~$
Загрузка XSD из строки
Если вы хотитечтобы передать содержимое файла XSD в виде строки, выВы должны использовать другую перегрузку xercesc :: DOMLSParser :: loadGrammar , где вы передаете
const DOMLSInput *source
вместо
const char *const systemId
DOMLSInput может быть создан с помощью xercesc :: MemBufInputSource и xercesc :: Wrapper4InputSource примерно так
xercesc::Wrapper4InputSource source(
new xercesc::MemBufInputSource(
(const XMLByte *) (a_XsdText.c_str()),
a_XsdText.size(),
"A name");
(адаптировано несколько изhttps://stackoverflow.com/a/15829424/757777 но не проверено)
Загрузка XSD из предварительно скомпилированного двоичного файла
Включено в программное обеспечение CodeSynthesis XSD встроено * Пример 1062 * (который находится в свободном доступе) демонстрирует, как использовать
xercesc :: BinInputStream и xercesc :: XMLGrammarPool :: deserializeGrammars
для загрузки предварительно скомпилированной схемы XSD.
См. Также README .
В примере содержится программа xsdbin
, которая компилирует файлы схемы XSD в двоичный файл.
user@linux:~$ xsdbin --help
Usage: xsdbin [options] <files>
Options:
--help Print usage information and exit.
--verbose Print progress information.
--output-dir <dir> Write generated files to <dir>.
--hxx-suffix <sfx> Header file suffix instead of '-schema.hxx'.
--cxx-suffix <sfx> Source file suffix instead of '-schema.cxx'.
--array-name <name> Binary data array name.
--disable-multi-import Disable multiple import support.
user@linux:~$
В make-файле файл схемы XSD предварительно компилируется с помощью xsdbin, и результат попадает в пример исполняемого файла.