6

この優れたツール (http://www.codesynthesis.com/products/xsd/c++/tree/) を使用して、xsd を C++ コードに変換しています。

サブノードから xml 文字列を取得しようとしていますが、取得できるのは次のようなすべての xml だけです。

すべてのxml:

<?xml version="1.0"?>
<people ....>

  <person id="1">
    <first-name>John</first-name>
    <address>
      ....
    </address>
  </person>
...

次のようにして、すべてのxmlを取得できます。

people_t& p = ...
xml_schema::namespace_infomap map;
map[""].schema = "people.xsd";

// Serialize to a string.
//
std::ostringstream oss;
people (oss, p, map);
std::string xml (oss.str ());

しかし、私が望むのは、たとえば < address > xml サブノードのみを取得することです。これは可能ですか?どのように達成することができますか?

ありがとう

4

2 に答える 2

0

あなたが何を求めているのか理解できれば、no_xml_declarationフラグを使用したいと思います。

people (oss, p, map, "UTF-8",
        xml_schema::flags::no_xml_declaration);

これにより、XML宣言が抑制されますが、Xerces-Cの一部のバージョンでは、最初に偽の改行が発生し、これを削除する必要があります。 http://www.codesynthesis.com/pipermail/xsd-users/2009-December/002625.html

後でこの質問を参照する他の人は、-generate-serializationを使用してxsdcxxを呼び出す必要もあります。デフォルトでは、解析メソッドのみが発行されます。

xsdcxx cxx-tree --generate-serialization {source XSD files}
于 2011-07-07T00:59:02.903 に答える
0

はい、可能です。address 要素のみをシリアル化できるようにする場合は、--root-elementオプションを CodeSynthesis XSD コマンドに渡す必要があります。Ubuntuでは、次のように記述します

xsdcxx cxx-tree --root-element address --generate-serialization people.xsd

一方、アドレスの値だけが必要な場合は、シリアル化を完全にスキップして、生成された get 関数を使用するだけで済みます。address()

于 2012-06-29T08:04:03.537 に答える