libxml2

测试使用版本为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

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值