Итеративный бросок определенного атрибута xml по кодесинтезу

У меня есть файл 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 и это не в состоянии итератора.

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector