Я использую libxml2 для разбора XML. Пример кода на веб-сайте libxml труден для восприятия, и в нем, похоже, отсутствуют некоторые детали. Я пришел к следующему коду от Googling, так что я даже не думаю, что это правильный способ сделать это, но он работал в написанной мной программе обучения, но не в этой. Я до сих пор не знаю, как правильно использовать libxml в C ++, поэтому я работаю в темноте и надеюсь, что у меня получится что-то полезное.
Файл XML загружается правильно, и когда эта функция выводит root->name
правильно, но затем, когда он проходит через дочерние элементы, он просто выводит text
при cur->name
, и я не знаю почему. Я должен поставить там счетчик, чтобы он не входил в бесконечный цикл. Я читал где-то пробел в XML-файле может вызвать это, но я не знаю, что делать. Я просто хочу название детали и идентификатор.
xmlNode *cur = root;
cur = cur->xmlChildrenNode;
ofstream out;
out.open("errorlog.txt", ios::app);
out << "attempting reading current node\n";
out << "root: " << root->name << endl;
int counter = 0;
// advance until it hits stars
while(cur != NULL && counter < 10){
if ((!xmlStrcmp(cur->name, (const xmlChar *)"parts")))
break;
cur->next;
counter++;
}
out << "counter: " << counter << endl;
out << "child: " << cur->name << endl;
Это XML-файл, который я использую:
<?xml version="1.0" encoding="utf-8"?>
<netlist>
<parts>
<part name="part10">
<attribute name="id">1</attribute>
</part>
<part name="part20">
<attribute name="id">2</attribute>
</part>
<part name="part30">
<attribute name="id">3</attribute>
</part>
</parts>
<junk>
<stuff id="3" />
<stuff id="4" />
<stuff id="5" />
</junk>
</netlist>