我有一个xsd文件,我想在属于它的xml(Here is my 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文件上迭代抛出属性“peptides”,但是
h->peptides ()
的输出是percolator_output::peptides_optional
,并且它不是可迭代的。 最佳答案
首先需要使用present()
函数来确认可选元素的存在。如果存在element,则函数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