1

xsdファイルがあり、それに属するxmlに特別な属性を繰り返しスローしたい(これが私のxsdです)。以下のようなコード合成によってクラスを作成した後:

xsdcxx cxx-tree --root-element percolator_output --generate-polymorphic --namespace-map http://per-colator.com/percolator_out/14=xsd pout.xsd

私は私のメインを次のように書いています:

int main (int argc, char* argv[])
{
  try
  {
   auto_ptr<percolator_output> h (percolator_output_ (argv[1]));
   //-----percolator_output::peptides_optional& pep (h->peptides ());
   for (peptides::peptide_const_iterator i (h->peptides ().begin ()); i != h->peptides ().end (); ++i)
   {
     cerr << *i << endl;
    }
  }
  catch (const xml_schema::exception& e)
  {
   cerr << e << endl;
   return 1;
  }
}

xmlファイルに属性「ペプチド」を繰り返しスローしたいのですが、の出力は反復可能でh->peptides ()percolator_output::peptides_optionalありません。

4

1 に答える 1

1

オプション要素の存在は、最初に関数を使用して確認する必要がありますpresent()。要素が存在する場合、関数get()を使用して要素への参照を返すことができます。コンパイルするために、コードをできるだけ変更しませんでした。

#include <iostream>
#include <pout.hxx>

using namespace std;
using namespace xsd;

int main (int argc, char* argv[])
{
  try
  {
    auto_ptr<percolator_output> h (percolator_output_ (argv[1]));
    if (h->peptides().present())
    {
      for (peptides::peptide_const_iterator i (h->peptides ().get().peptide().begin ()); i != h->peptides ().get().peptide().end (); ++i)
      {
        cerr << *i << endl;
      }
    }
  }
  catch (const xml_schema::exception& e)
  {
   cerr << e << endl;
   return 1;
  }
}

また、コマンドライン引数--generate-ostreamがにありませんでしたxsdcxx

$ xsdcxx cxx-tree --root-element percolator_output --generate-polymorphic --generate-ostream --namespace-map http://per-colator.com/percolator_out/14=xsd pout.xsd
$ g++ -I. main.cc pout.cxx -lxerces-c
$ cat /etc/issue
Ubuntu 12.10 \n \l
于 2013-02-27T18:17:28.947 に答える