Xsd cxx-treeパーサーを使用してXsdからC++クラスに変換します。ファイルからxmlを開くためのメソッド。
-
21-12-2019 - |
質問
Xsd(xml best friend)ファイルをC++クラスに解析するために、xsd3.3.0コンパイラを使用しています。(最後のwebリンクを参照)
Comandの名前はあります
xsd cxx-tree(オプション)ファイル。xsd
(+情報 http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/)
いくつかの例によるcodesynthesisて構文解析しこんにちは.xsd文書を作成し、.hxxとa.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 ());
ファイル名の文字列を受け取ります
string&uri="こんにちは.xsd"
そして、メインで使用するオブジェクトを作成します。cxx...
だから、私は自分のxsdファイルで同じことをしようとしています。Xsd cxx-treeコンパイラを使用しますが、「URIまたはローカルファイルを解析する」メソッドは作成されません。".その後、メインプログラムのxmlファイルからオブジェクトを作成することはできません。
私はcodesysコンパイラのドキュメントからの異なるオプションを使用していくつかのコンパイル問題を解決します(http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml).何をコンパイルしたいのか、どのようにしたいのかなど、さまざまなオプションがあります。..しかし、「URIまたはローカルファイルを解析する」ために使用されるメソッドを有効にするオプションは見つかりません。".
より多くの情報を与えると、xml-xsd文書はCBMLプロトコル文書である。
あなたの助けをありがとう!
解決 2
私は自分で解決策を見つけました!
コンパイルには異なるオプションを使用しました。私はオプション "--root-elementライブラリ"を使用していました、そしてそれはメソッドが "URIまたはローカルファイルの解析]を実行しました。作成されていませんでした。
このオプションを削除し、すべてのPrincipalsオブジェクトの解析メソッドを作成する "--root-element-all"を追加しました!
今私のプログラムはうまくいきます!ありがとう!
他のヒント
私はこの製品を常に使用しています。
ここにあなたがやろうとしていることの例があります(私は思う):
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
ファイル。
これがあなたが望んでいたものでないならば、私にコメントで知らせてください、そして私はあなたをもう少し助けることを試みることができます。