Как мне получить контент с помощью libxml2? - PullRequest
2 голосов
/ 13 августа 2010

Я использую libxml2 и C ++. Следующая функция падает здесь return (char*)cur->content;. Когда я изменяю его на return (char*)cur->name;, он возвращает attribute, которое является именем тега То, что я хочу, это 1, 2 и 3 (на основе XML-файла под кодом C ++). Что я делаю не так?

char* xml2sdf::getId(xmlNode* part){

    xmlNode* cur = part->xmlChildrenNode;

    // get the id
    while (cur != NULL) {

        if ( !xmlStrcmp(cur->name, (const xmlChar *)"attribute") ) {
            xmlAttrPtr attr = cur->properties;

            if( !xmlStrcmp( attr->children->content, (const xmlChar*)"id" ) ){
                return (char*)cur->content;
            }
        }

        cur = cur->next;
        }

    }
}

Часть файла XML, которую он анализирует:

<part ref="part10" name="part10">
    <attribute name="face">7</attribute>
    <attribute name="id">1</attribute>
</part>

<part ref="part20" name="part20">
    <attribute name="face">5</attribute>
    <attribute name="id">2</attribute>
</part>

<part ref="part30" name="part30">
    <attribute name="face">9</attribute>
    <attribute name="id">3</attribute>
</part>

1 Ответ

7 голосов
/ 13 августа 2010

Я обнаружил, что это должно быть return (char*)cur->children->content; методом проб и ошибок.

...