我刚开始使用libxml来解析xml。 我只需要知道根节点“beatles”是否存在,然后得到子节点“lastname”。 我的代码如下
#include #include #include #include #include void parseStory ( xmlDocPtr doc, xmlNodePtr cur ) { xmlChar *key; cur = cur -> xmlChildrenNode; printf ( "Heren" ); while ( cur != NULL ) { if ( ( !xmlStrcmp ( cur -> name, ( const xmlChar * ) "lastname" ) ) ) { key = xmlNodeListGetString ( doc, cur -> xmlChildrenNode,1); printf ( "keyword: %sn", key ); xmlFree ( key ); } cur = cur -> next; } return ; } static void parseDoc ( char *docname ) { xmlDocPtr doc; xmlNodePtr cur; doc = xmlParseFile ( docname ); if ( doc == NULL ) { fprintf ( stderr, "Document not parsed successfully. n" ); return; } printf ( "Parsing Successfuln" ); cur = xmlDocGetRootElement ( doc ); if ( cur == NULL ) { fprintf ( stderr, "empty document n" ); xmlFreeDoc ( doc ); return; } printf ( "Got the root Noden" ); if ( xmlStrcmp ( cur->name, ( const xmlChar * ) "beatles" ) ) { fprintf ( stderr, "Document of the wrong type root node != "); xmlFreeDoc(doc); return; } printf ( "Got the root n" ); cur = cur -> xmlChildrenNode; while ( cur != NULL ) { if ( !(xmlStrcmp ( cur->name, ( const xmlChar * ) "name" ) ) ) { parseStory ( doc, cur ); } cur = cur -> next; } xmlFreeDoc ( doc ); return; } int main ( int argc, char **argv ) { char *docname; if ( argc <= 1 ) { printf ( "Usage: %s docnamen", argv[0] ); return ( 0 ); } docname = argv [1]; parseDoc ( docname ); return ( 1 ); }
而xml文件是
Paul McCartney
我能够获得根节点“beatles”,但我无法找到“名称”和“姓氏”。 请帮我解决一下这个。
如果还有其他libxml函数可以使用,请告诉我。 谢谢。
你需要在while循环中进行一些小改动。
printf ( "Got the root n" ); cur = cur -> xmlChildrenNode; while ( cur != NULL ) { if (cur->type == XML_ELEMENT_NODE) { if ( !(xmlStrcmp ( cur->name, ( const xmlChar * ) "name" ) ) ) { parseStory ( doc, cur ); } cur = cur -> xmlChildrenNode; continue; } cur = cur -> next; }
以上就是c/c++开发分享使用libxml的XML Parser相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549887.html