C++ rapidxml的使用

来源:互联网 发布:中英文对照阅读软件 编辑:程序博客网 时间:2024/05/07 15:34

解析步骤

1 读取xml文件内容
 以文件流的方式读取xml文件到char型数组中

char* ReadFiel(const char* fileName){    FILE* file = fopen(fileName,"rb");    if (file==0)    {        return 0;    }    fseek(file,0,SEEK_END);    size_t len = ftell(file);    fseek(file,0,SEEK_SET);    char* data = new char[len+1];    memset(data,0,len+1);    fread(data,1,len,file);    fclose(file);    return data;}

2 解析xml

void AnalysisXML(){    char* xml = ReadFiel("case.xml");    if (xml==0)    {        return;    }    rapidxml::xml_document<> doc;       //创建xml文档对象    rapidxml::xml_node<>*    root;      //创建xml节点(根节点)    rapidxml::xml_node<>*    childNode;  //创建xml节点(子节点)    try    {        doc.parse<0>(xml);             //解析xml文档        root = doc.first_node();       //得到根节点        childNode= root->first_node(); //得到根节点下的第一个子节点        for (;childNode;childNode=childNode->next_sibling())//遍历childNode的兄弟节点        {            //获取节点的属性,并赋值给xml文档的节点属性对象xml_attribute<>* attrxxx            rapidxml::xml_attribute<>* attrName = childNode->first_attribute("name");            rapidxml::xml_attribute<>* attrStart = childNode->first_attribute("start");            rapidxml::xml_attribute<>* attrEnd = childNode->first_attribute("end");            rapidxml::xml_attribute<>* attrFile = childNode->first_attribute("file");            //输出属性值            cout<<attrName->value()<<endl;            cout<<attrStart->value()<<endl;            cout<<attrEnd->value()<<endl;            cout<<attrFile->value()<<endl;        }    }    catch (...)    {    }    delete []xml;}

总结如下:

转自:http://blog.csdn.net/angellove156/article/details/50623914
解析xml文件:
首先,通过文件读取IO流,
然后,将IO流,转换为char数组 buffer

解析buffer内的数据:

1 创建xml doc:
xml_doument<> doc;
2 解析数据:
doc.parse<0>(buffer), 0 是按照默认方式进行解析

3 xml的 构成:
xml_node<>:
xml_attribute<>

4 包含关系:
xml_node<> 包含 xml_attribute<>
xml_attribute<>是 键值对的形式:
name 对应一个属性值

5 获取根节点:
xml_node<> *root_node = doc.first_node()
如果找某个名字的节点:
xml_node<> *nameNode = root_node->first_node(“name”);
找同一个名字的其它节点:
xml_node<> *anotherNode = nameNode->next_sibling();

如果找某个节点的 某个名字的属性:
方法可以参考 找某个名字的节点
得到属性的值:
调用其value方法。

原创粉丝点击