Загрузка Collada с помощью libxml2 - PullRequest
0 голосов
/ 09 августа 2010

Я хочу загрузить колладу с помощью libxml2. Я получаю узел COLLOADA, хорошо, затем я пытаюсь получить тег детей - FAIL, имя тега детей - «текст». Зачем? Как я могу получить дочерний узел узла COLLADA?

xmlNode* geometries = xmlDocGetRootElement(doc)->children;

//at THIS point the geometries->name == "text"  WHY?
//IS not it supposed to be "asset"?

while(!xmlStrcmp(geometries->name, (const xmlChar*)"library_geometries")) 
geometries = geometries->next;


xmlNode* mesh = geometries->children;
for(uint i = 0; i < idx; i++)
mesh = mesh->next;

Где я не прав?

Ответы [ 2 ]

0 голосов
/ 18 октября 2010

Взгляните на этот метод из этого примера на веб-сайте libxml2:

static void
print_element_names(xmlNode * a_node)
{
    xmlNode *cur_node = NULL;

    for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
        if (cur_node->type == XML_ELEMENT_NODE) {
            printf("node type: Element, name: %s\n", cur_node->name);
        }
    }

    print_element_names(cur_node->children);
}

Обратите внимание, что этот код проверяет, имеет ли узел тип XML_ELEMENT_NODE перед печатью его имени,Узел "text", который вы читаете, - это текст между открывающим и закрывающим тегами:

<myTag>This is the text between the tags</myTag>
0 голосов
/ 10 августа 2010

Хорошо, проблема решена. На каждом -> детей и -> следующий я должен был поставить другой -> следующий (я не имею в виду рекурсивно :)) Кстати, я не знаю почему, но это работает таким образом.

...