0

libxml2 で collada をロードしたい。COLLLOADA ノードを取得し、子タグを取得しようとしましたが、失敗しました。子タグ名は「テキスト」です。なんで?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;

どこが間違っていますか?

4

2 に答える 2

0

わかりました、問題は解決しました。すべての ->children および ->next で、別の ->next を配置する必要がありました (再帰的にという意味ではありません:))。ところで、理由はわかりませんが、そのように機能します。

于 2010-08-10T07:30:02.120 に答える
0

libxml2 Web サイトのこの例のこのメソッドを見てください。

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>
于 2010-10-18T12:44:32.863 に答える