xml文件解析(二)——运用libxml2库解析xml文件
来源:互联网 发布:软件脱壳教程 编辑:程序博客网 时间:2024/05/17 04:41
如何解析一个xml文件呢,我们可以使用libxml2库。
libxml2解析xml文件的要点是需要理解xml文档的树形结构,弄懂三个指针root,children及next,其分别代表父、子及同胞关系。
安装libxml2:
依赖:需要安装python-devel——yuminstall python-devel
安装libxml2——./configure; make; make install
主要函数:
xmlDocPtr xmlParseFile(const char *filename);
xmlDocPtr xmlParseMemory(const char *buffer, int size);
xmlNodePtr xmlDocGetRootElement(constxmlDoc* doc);
xmlChar * xmlNodeGetContent(const xmlNode*cur);
xmlChar * xmlGetProp(const xmlNode *node,const xmlChar *name);
xmlFree(xmlNodePtr)
xmlFreeDoc(xmlDocPtr)
实例:testXml.cpp
#include <iostream>#include <libxml/parser.h>#include <string>using namespace std;void parseXmlNode(const xmlNodePtr & xmlRootNode);const char* xmlFilename = "bookstore.xml";int main(){xmlDocPtr doc = xmlParseFile(xmlFilename);if(NULL == doc){cout << "Parsed xmlFile failed!" << endl;return -1;}xmlNodePtr xmlRootNode = xmlDocGetRootElement(doc);if(NULL == xmlRootNode){cout << "GetRootElement failed" << endl;xmlFreeDoc(doc);return -1;} parseXmlNode(xmlRootNode);xmlFreeDoc(doc);return 0;}void parseXmlNode(const xmlNodePtr & xmlRootNode){xmlNodePtr xmlChildNode = xmlRootNode->xmlChildrenNode;while(NULL != xmlChildNode){if(xmlChildNode->xmlChildrenNode != NULL){cout << "" << (char *)xmlChildNode->name << ":";cout << "\t" << (char*)xmlNodeGetContent(xmlChildNode) << endl;}if (!xmlStrcmp(xmlChildNode->name, (const xmlChar*)"title")){cout << "lang of " << (char *)xmlChildNode->name << " is " << (char *)xmlGetProp(xmlChildNode, (const xmlChar*)"lang") << endl;}if (xmlChildNode->xmlChildrenNode != NULL){parseXmlNode(xmlChildNode);}xmlChildNode = xmlChildNode->next;}return ;}
编译:
g++ testXml.cpp -I/usr/local/libxml2/include/libxml2/ -lxml2
其中/usr/local/libxml2/include/libxml2/指出了libxml文件夹的路径
输出:
book: Everyday Italian Giada De Laurentiis 2005 30.00 title:Everyday Italianlang of title is enauthor:Giada De Laurentiisyear:2005price:30.00book: Harry Potter J K. Rowling 2005 29.99 title:Harry Potterlang of title is enauthor:J K. Rowlingyear:2005price:29.99
其中bookstore.xml 如下:
<bookstore><book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book><book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book><bookstore>
0 0
- xml文件解析(二)——运用libxml2库解析xml文件
- libxml2解析xml文件记录
- Libxml2的学习—生成、解析xml文件
- [Linux C]利用libxml2解析xml文件
- 使用libxml2读取文件解析xml
- xml文件解析--libxml2库函数解释
- [Linux C]利用libxml2解析xml文件
- xcode 中libxml2 解析xml文件
- linux下用库libxml2解析xml文件
- xml文件的解析(libxml2)
- Ubuntu下C语言使用libxml2库解析xml文件
- 使用libxml2库来生成和解析xml文件
- linux下使用libxml2库,解析xml文件
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2对XML文件的创建、解析、查找、修改
- libxml2.7.8 c++ 解析xml文件 中文转换
- 【 AnglularJS】——核心特性之MVC & 模块化
- Memcache介绍
- 高并发性能调优
- UILabel 文字太长尾部显示"..."
- Linux磁盘编号
- xml文件解析(二)——运用libxml2库解析xml文件
- 《编写高质量代码:改善C++程序的150个建议》读书笔记2
- 使用过滤流DataOutputStream和DataInputStream对文件写入和读出
- 局部变量全局变量和动态分配的数据分别在内存中存放的位置
- 2015程序猴的总结:不破楼兰终不还!
- HDU 1905 Pseudoprime numbers (快速幂求余)
- 1032 Sharing
- 获取UILabel 的文字内容高度
- 计算机网络学习笔记----互联网分层及协议