Linux下使用libxml2解析XML配置文件

这是一个项目过程中所遇到的问题。有多个商品种类,每个商品种类有着不同的基本信息,现在我们需要对这些基本信息进行验证。但是每个种类会有自己独特的验证需求(不同种类需要验证的字段可能不一样),如果我们使用代码来判断每个种类需要验证哪些字段会非常麻烦,而且需求稍一变动就要修改源码。所以就想到用配置文件来设置每种商品有哪些字段(信息)需要验证哪些不需要验证。

与上一篇文章使用tinyxml解析XML配置文件有着相同的功能,这是对解析XML文件另一种方法的尝试。两种方式在保存解析出的配置信息的方法上有所不同,tinyxml使用map来保存配置数据,这里是使用数组来保存配置数据。

先贴出要解析的XML文件category.xml:



    
        30
        1
        1
        1
        1
        1
        0
        0
        0
    
    
        23
        1
        1
        1
        1
        1
        0
        0
        0
       

下面是具体的代码:

#include 
#include 
#include 
#include 
#include 

using namespace std;

void readXMLBetter(string& fileName, int (&arrays)[8], int arraySize, int& cgId, int& flag)
{
    xmlDocPtr doc = xmlParseFile(fileName.c_str());
    if (doc == NULL)
    {
        cout<<"Read xml failed."<xmlChildrenNode;
    while (curElement)
    {
        //如果是text则链表向下走一位
        if (!xmlStrcmp(curElement->name,(const xmlChar*)"text"))
        {
            curElement = curElement->next;
            if (curElement == NULL)
                break;
        }
        
        xmlNodePtr curNode = curElement->xmlChildrenNode;

        //得到categoryId,判断是否跟cgId相等
        if (!xmlStrcmp(curNode->name,(const xmlChar*)"text"))
        {
            curNode = curNode->next;
            if (curNode == NULL)
                break;
        }
        xmlChar* tmp = xmlNodeGetContent(curNode);
        int categoryId = atoi((char *)tmp);
        xmlFree(tmp);
        curNode = curNode->next;
        
        if (categoryId == cgId)
        {
            int i = 0;
            while(curNode)
            {
                if (!xmlStrcmp(curNode->name,(const xmlChar*)"text"))
                {
                    curNode = curNode->next;
                    if (curNode == NULL)
                        break;
                }
                xmlChar* tmp = xmlNodeGetContent(curNode);
                if (i < arraySize)
                    arrays[i++] = atoi((char *)tmp);
                
                xmlFree(tmp);                
                curNode = curNode->next;
            }                                   
        }
        
        curElement = curElement->next;
    }
    
    xmlFree(doc);
}

int main()
{
    string fileName = "category.xml";
    int categorys[5] = {12, 23, 25, 30, 45};
    
    
    for (int i = 0; i < 5; ++i)
    {
        int flag = 0;
        int arrays[8] = {1, 1, 1, 1, 1, 1, 1, 1};
        readXMLBetter(fileName, arrays, 8, categorys[i], flag);
        
        int brand = arrays[0];
        int color = arrays[1];
        int marketTime = arrays[2];
        int model = arrays[3];
        int productFuc = arrays[4];
        int netSize = arrays[5];
        int pkgSize = arrays[6];
        int pkgList = arrays[7];
        
        cout<<"categoryId ============ "<


你可能感兴趣的:(XML)