2010-02-23 5 views
0

J'ai besoin d'obtenir le nom et les valeurs d'un fichier xml avec de nombreux éléments. Quel est le meilleur moyen de capturer les valeurs d'attribut dans une classe?Utiliser expat pour analyser xml

Je dois code suivant pour le gestionnaire de startElement:

start(void *data, const char *el, const char **attr) 
{ 
    int i; 

    // Skip the ParameterList element 
    if(strcmp(el, "ParameterList") == 0) 
    { 
     Depth++; 
     return; 
    } 
    //for (i = 0; i < Depth; i++) 
    //printf(" "); 

    //printf("%s", el); 
    DEMData demData; 
    for (i = 0; attr[i]; i += 2) 
    { 
     if(strcmp(attr[i],"BitFldPos") == 0) 
     { 
     demData.SetBitFldPos(*attr[i + 1] - '0'); 
     } 
     else if(strcmp(attr[i],"BytFldPos") == 0) 
     { 
     char* pEnd; 
     int tmp = strtol(attr[i + 1],&pEnd,10); 
     demData.SetBytFldPos(tmp); 
     } 
     else if(strcmp(attr[i],"ByteOrder") == 0) 
     { 
     demData.SetByteOrder(attr[i + 1]); 
     } 
     else if(strcmp(attr[i],"DesS") == 0) 
     { 
     demData.SetDesS(attr[i + 1]); 
     } 
     else if(strcmp(attr[i],"EngUnit") == 0) 
     { 
     demData.SetEngUnit(attr[i + 1]); 
     } 
     else if(strcmp(attr[i],"OTag") == 0) 
     { 
     demData.SetOTag(attr[i + 1]); 
     } 
     else if(strcmp(attr[i],"ValTyp") == 0) 
     { 
     demData.SetValType(attr[i + 1]); 
     } 
     else if(strcmp(attr[i],"idx") == 0) 
     { 
     char* pEnd; 
     int tmp = strtol(attr[i + 1],&pEnd,10); 
     demData.SetIndex(tmp); 
     } 
     //printf(" %s='%s'", attr[i], attr[i + 1]); 
    } 


    // Insert the data in the vector. 
    dems.push_back(demData); 

    Depth++; 
} 

Répondre

0

je recommande un vecteur STL de paires STL de chaînes. le premier est le nom de l'attribut, le second est la valeur.

std::vector<std::pair<std::string,std::string> > 

Certains suggéreraient un std :: map.