Как получить 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
.
Для редактора (похоже, что ваш пост - это в основном код, добавьте еще несколько деталей.) У меня нет более подробных сведений об этом случае...
Вы используете xmlGetProp(), который извлекает значение атрибута текущего узла, но "информация" является дочерним, а не атрибутом "дочернего" узла. То, что вы должны использовать, - это xmlNodeGetContent() на узле "info".
это похоже на опечатку. вы должны использовать (const xmlChar *)"child")
вместо (const xmlChar *)"cild")