libxml как получить дочерний атрибут

0

Как получить value child atribute? Например, xml:

<root>
   <child>
      <info>Lala</info>
   </child>
</root>

Как я получу Lala? Я пробую это (но он не работает :())

void parsePackage (xmlDocPtr doc, xmlNodePtr cur) {
        xmlChar *key;
        xmlChar *uri;
        cur = cur->xmlChildrenNode;
        while (cur != NULL) {
        if ((!xmlStrcmp(cur->name, (const xmlChar *)"child"))) {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            uri = xmlGetProp(cur, (const xmlChar *)"info");
            printf("Info: %s\n", uri);
            xmlFree(key);
        }
            cur = cur->next;
        }
    return;
}

void parseDoc() {
    xmlDocPtr doc;
    xmlNodePtr cur;

    doc = xmlParseFile("test.xml");

    if (doc == NULL ) {
        fprintf(stderr,"Document not parsed successfully. \n");
        return;
    }

    cur = xmlDocGetRootElement(doc);

    if (cur == NULL) {
        fprintf(stderr,"empty document\n");
        xmlFreeDoc(doc);
        return;
    }

    if (xmlStrcmp(cur->name, (const xmlChar *) "root")) {
        fprintf(stderr,"document of the wrong type, root node != package");
        xmlFreeDoc(doc);
        return;
    }

    parsePackage(doc, cur);
    xmlFreeDoc(doc);
    return;
}

Когда я запускаю этот код, я получаю не LaLa, я получаю null.
Для редактора (похоже, что ваш пост - это в основном код, добавьте еще несколько деталей.) У меня нет более подробных сведений об этом случае...

Теги:
libxml2

2 ответа

1
Лучший ответ

Вы используете xmlGetProp(), который извлекает значение атрибута текущего узла, но "информация" является дочерним, а не атрибутом "дочернего" узла. То, что вы должны использовать, - это xmlNodeGetContent() на узле "info".

0

это похоже на опечатку. вы должны использовать (const xmlChar *)"child") вместо (const xmlChar *)"cild")

  • 0
    да, это опечатка; D

Ещё вопросы

Сообщество Overcoder
Наверх
Меню