2011-10-03 11 views
-1

J'ai une simple chaîne xml définie de la manière suivante dans le code AC:analyse syntaxique des valeurs xml

char xmlstr[] = "<root><str1>Welcome</str1><str2>to</str2><str3>wonderland</str3></root>"; 

Je veux analyser le xmlstr chercher toutes les valeurs attribuées à str1, str2, balises str3 . J'ai utilisé libxml2 library. Comme je suis moins expérimenté dans la gestion de XML, je n'arrive pas à obtenir les valeurs des balises requises. J'ai essayé quelques sources de net, mais je finis de mauvaises sorties.

Répondre

1

Utilisation de la bibliothèque libxml2 analyse de votre chaîne ressemblerait à quelque chose comme ceci:

char xmlstr[] = ...; 
char *str1, *str2, *str3; 
xmlDocPtr doc = xmlReadDoc(BAD_CAST xmlstr, "http://someurl", NULL, 0); 
xmlNodePtr root, child; 

if(!doc) 
{ /* error */ } 

root = xmlDocGetRootElement(doc); 

maintenant que nous avons analysé une structure DOM hors de votre chaîne xml, nous pouvons extraire les valeurs en itérant sur toutes les valeurs enfant de yo ur tag root:

for(child = root->children; child != NULL; child = child->next) 
{ 
    if(xmlStrcmp(child->name, BAD_CAST "str1") == 0) 
    { 
     str1 = (char *)xmlNodeGetContent(child); 
    } 

    /* repeat for str2 and str3 */ 
    ... 
} 
+0

quelle est la signification de l'URL dans ce qui précède. Ce que j'ai à donner pour mon programme – user976211

+0

Pour être franc, je ne suis pas sûr. Les docs indiquent seulement que ceci est utilisé comme "* base *", peu importe ce que cela signifie. Je suppose que ce n'est pas important dans ce petit exemple. – Constantinius

+0

J'ai aussi trouvé la même chose. Cependant, merci pour votre aide. Je pourrais faire ce petit code patch à intégrer dans mon énorme application. – user976211