从xml doc获取所有信息

时间:2016-01-12 09:49:27

标签: c libxml2

我尝试做一些看起来非常简单的事情: 我有这条线

<example status="OK" value="200"/>

我想用libxml2解析它并得到&#34; status&#34;的值和&#34;价值&#34;,但我所有的尝试都失败了。

这是我的实际代码:

#include <libxml/tree.h>
#include <libxml/parser.h>

void Display_Node(xmlDocPtr doc, xmlNodePtr node)
{
    // printf("test :: %s\n", xmlNodeListGetString(doc, noeud, 1));
    // printf("test :: %s\n", xmlNodeListGetString(doc, noeud->children, 1));

    printf("%2d :: ", node->type);
    if (node->type == XML_ELEMENT_NODE) {
        xmlChar *chemin = xmlGetNodePath(node);
        if (node->children && node->children->type == XML_TEXT_NODE) {
            xmlChar *contenu = xmlNodeGetContent(node);
            printf("%s -> %s\n", chemin, contenu);
            xmlFree(contenu);
        } else {
            printf("%s\n", chemin);
        }
        xmlFree(chemin);
    } else {
        printf("NOTHING\n");
    }
    // printf("\n");
}

void MyXml_Dump(xmlDocPtr doc, xmlNodePtr node)
{
    for (xmlNode *tmp = node; tmp; tmp = tmp->next) {
        Display_Node(doc, tmp);
        if (tmp->children) {
            MyXml_Dump(doc, tmp->children);
        }
    }
}

int main(void)
{
    char *xml = "<example status=\"OK\" value=\"200\"/>";

    xmlDocPtr doc = xmlParseMemory(xml, strlen(xml));

    if (!doc) {
        printf("Error while parsing.\n");
        return (1);
    }

    xmlNodePtr racine = xmlDocGetRootElement(doc);
    if (!racine) {
        fprintf(stderr, "No xml content.\n");
        xmlFreeDoc(doc);
        return (1);
    }


    printf("Xml Dump :\n");
    MyXml_Dump(doc, racine);
    printf("\n");


    xmlFreeDoc(doc);
}

我的结果是:

Xml Dump :
 1 :: /example

我尝试使用xmlNodeListGetString或xmlNodeGetContent来转储我想要的值,但这不起作用(两者的结果相同)。

似乎这个值根本就不存在(因为我在每个节点都添加了一个printf,看起来只有一个节点),所以我开始怀疑我是否使用了正确的解析函数(xmlParseMemory)或者如果libxml2忽略了这种值。

它不是我经常使用的图书馆,所以我有点迷失。 有办法实现我想要的吗?

0 个答案:

没有答案