首页 > 代码库 > windows 系统在vs2010 中配置libxml2,及读取xml代码例子

windows 系统在vs2010 中配置libxml2,及读取xml代码例子

1、先下载libxml2 (下载地址 http://download.csdn.net/detail/luoww1/8095273),里面包括了三个文件夹分别:zlib-1.2.3.win32 和iconv-1.9.2.win32 和libxml2-2.7.6.win32

2、将下载内容中的iconv.dll 和zlib1.dll 拷贝到C盘下的Windows文件夹中

3、在项目中新建include 文件夹,解压的到的libxml2和iconv中的include文件夹中的内容拷入到该include文件夹中,若项目名称为proxyServer,目录结构如图所示


4、VS2010项目proxyServer,右击,选择“属性”-->C/C++-->常规 在附加包含目录中添加

.\include

5、将iconv.lib 和iconv_a.lib和libxml2.lib和libxml2_a.lib放在项目根目录中,可见上面的图片

6、VS2010项目proxyServer,右击,选择“属性”-->链接器-->输入中添加

iconv.lib ;iconv_a.lib;libxml2.lib;libxml2_a.lib

</pre>7、工程中用libxml2读取xml文件的代码<pre name="code" class="cpp">#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main(int argc, char** argv) {
xmlDocPtr doc;           //定义解析文档指针
    xmlNodePtr curNode;      //定义结点指针(你需要它为了在各个结点间移动)
    xmlChar *szKey;          //临时字符串变量
    char szDocName[] = "Device.xml";
    using std::string;
    using std::cout;
    using std::endl;
    
    doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件
    //检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
    //一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。
    //如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.
    if (NULL == doc)
    {
       //文档打开错误
       return -1;
    }
    curNode = xmlDocGetRootElement(doc); //确定文档根元素
    /*检查确认当前文档中包含内容*/
    if (NULL == curNode)
    {
       //空得xml文件
       xmlFreeDoc(doc);
       return -2;
    }
    /*在这个例子中,我们需要确认文档是正确的类型。“Devices”是在这个示例中使用文档的根类型。*/
    if (xmlStrcmp(curNode->name, BAD_CAST "Devices"))
    {
       //分析根元素失败
       xmlFreeDoc(doc);
       return -3;
    }
    curNode = curNode->xmlChildrenNode;
    xmlNodePtr propNodePtr = curNode;//xmlNodePtr 节点列表的指针
    while(curNode != NULL)
    {
       //取出节点中的内容
       if ((!xmlStrcmp(curNode->name, (const xmlChar *)"Device")))  //取出节点Device的内容
       {
           szKey = xmlNodeGetContent(curNode);//获取内容
           cout << szKey << endl; 
           xmlFree(szKey);
       }
       //查找带有属性url的节点
       if (xmlHasProp(curNode,BAD_CAST "url"))
       {
           propNodePtr = curNode;	
		   //cout<< xmlGetProp(propNodePtr,BAD_CAST "url") <<endl;//输出URL的值			
       }
       curNode = curNode->next;
    }
  //查找属性
    xmlAttrPtr attrPtr = propNodePtr->properties; //xmlAttrPtr 属性列表的指针
    while (attrPtr != NULL)
    {
       if (!xmlStrcmp(attrPtr->name, BAD_CAST "url"))
       {
           xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST "url");
           cout << szAttr << endl; //找到url的属性
           xmlFree(szAttr);
       }
       attrPtr = attrPtr->next;
    }

    xmlFreeDoc(doc);//函数关闭文档指针,并清除本文档中所有节点动态申请的内存
}
8、Device.xml 文件的内容

<?xml version="1.0" encoding="GB2312"?>
<Devices>
	<Device  url="www.baidu.com"  />
	<Device url="www.taobao.com"/>
</Devices>



windows 系统在vs2010 中配置libxml2,及读取xml代码例子