Comment parser un fichier XML avec libxml ?
Je fournis ici un petit programme C (et son Makefile) permettant de parser le fichier exemple XML detector.xml.
Soit:
<slice material = "Silicon" thickness = "0.008*cm"/>
<slice material = "Silicon" thickness = "0.002*cm" sensitive = "yes" />
- Avant toute chose nous devons nous assurer que le document XML à parser est bien du format pour lequel notre parser est fait c.à.d ici à detector. On utilise pour cela la fonction xmlNodePtr qui permet de naviguer sur les noeuds xml de notre document.
xmlNodePtr cur;
Si on se position au premier noeud
cur = xmlDocGetRootElement(doc);
nous devons avoir la condition:
if(!xmlStrcmp(cur->name, (const xmlChar *) "detector"))
vérifié sinon on sort du programme..
- On se deplace dans le document avec xmlChildrenNode
cur = cur->xmlChildrenNode;
Le contenu des champs des noeuds se fait avec xmlGetProp, par exemple
InnerRadius = xmlGetProp(cur,"inner_r")
nous donne la valeur du champ inner_r qui se trouve au noeud layer.
- Pour avoir accès au contenu du noeud comment (par exemple
« Only a xml file to show how to parse it … ») on utilise:xmlNodeListGetString
Voilà pour essentiel …
Pour tester mon petit parser de demo:
- parserXML.C
- Makefile
- detectors.xml : copier coller la description ci-dessus du fichier XML
Je vous conseil vivement d’utiliser Firefox pour ouvrir un fichier XML.