libxml2

来源:互联网 发布:流光软件有毒吗 编辑:程序博客网 时间:2024/04/29 22:04

测试使用版本为libxml2-2.7.3.tar.gz ,网上即可下载到。

一. 安装

1. 解压 

2. ./configure 

3. make

4. make install

安装完成后, 会在当前路径下, 有个目录 .libs , 里面有libxml2.a   libxml2.so  等。

头文件和lib 默认安装路径为 /usr/include/libxml2/libxml/        /usr/lib64/

                                                  或 /usr/local/include/libxml2/libxml    /usr/local/lib64


二. 使用

  1. 如何正确安装,写demo时直接包含头文件 #include<libxml/parser.h>  等即可

       自己使用时,由于机器权限问题, make 成功,但是make install  失败, 未能正确安装

       但只要make 成功,.a  .so 都已生成, 所以可以直接使用, 即方法2


   2.  make 成功后, 在libxml2-2.7.3/include/libxml 下包含了所有的头文件,  libxml2-2.7.3/.libs  下包含了所有的.a  和 .so 库文件

       a.  test.xml  示例, 目的取出W 的值和 它的属性

           

     b. demo.cpp

         

#include <libxml/parser.h>#include <iostream>using namespace std;int main(){    xmlDocPtr doc;                        //定义解析文档的指针    xmlNodePtr curNode;                   //定义节点指针    xmlChar *szKey;                       //临时字符串变量    char szDocName[] = "test.xml";        //指定要解析的xml文档    doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER);   //解析读取xml文档    if (NULL == doc)    {        cout << "open test.xml fail" <<endl;        return -1;    }    curNode = xmlDocGetRootElement(doc);   //获取xml文档的根节点(元素)    if (NULL == curNode)    {        xmlFreeDoc(doc);        cout << "test.xml is empty" <<endl;        return -2;    }    if (xmlStrcmp(curNode->name, BAD_CAST "root"))  //检查根节点是否正确    {        xmlFreeDoc(doc);        cout << "root is wrong" <<endl;        return -3;    }    curNode = curNode->xmlChildrenNode;      //获取根节点的子节点    xmlNodePtr propNodePtr = curNode;    while(curNode != NULL)    {        if ((!xmlStrcmp(curNode->name, (const xmlChar *)"W")))        {            szKey = xmlNodeGetContent(curNode); // 获取该节点的内容            cout << szKey << endl;            xmlFree(szKey);        }        if (xmlHasProp(curNode,BAD_CAST "b"))  //查找带有属性b的节点        {            propNodePtr = curNode;        }        curNode = curNode->next;    }    xmlAttrPtr attrPtr = propNodePtr->properties;    while (attrPtr != NULL)    {        if (!xmlStrcmp(attrPtr->name, BAD_CAST "b")) //检查属性名        {            xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "b"); //获取属性            cout << szAttr << endl;            xmlFree(szAttr);        }        attrPtr = attrPtr->next;    }    xmlFreeDoc(doc);    return 0;}

c. 编译

  g++ -o demo demo.cpp -I/usr/include/libxml2/  -L/usr/lib64/   -lxml2 

  或 g++ -o demo demo.cpp -I./include/  -L./.libs -lxml2 


d. 输出

   width
   20

        

0 0