msgbartop
msgbarbottom

16 oct 08 ParserXML

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:

<!-- xml  Detector description example -->
<detector/>
        <info name="oner" title="Super detector" author="Ol." date="march 2024">
        <comment&gt;Only a xml file to show how to parse it ...&lt;/comment>
	</info>
	<detec id="0" name="Cap" type="Polygone" TrackingVolume="true">
	        <material name="Beryllium"/>
		<zplane rmin="1.2*cm" rmax="1.9*cm"   z="-6.*cm"/>
		<zplane rmin="1.2*cm" rmax="1.3*cm" z="6.*cm" />
	</detec>
	<detec id="0" name="Vertex" type="Tracker" readout="Hits">
	<layer id="1" inner_r = "1.4*cm" outer_z = "6.25*cm">
		<slice material = "Silicon" thickness = "0.008*cm"/>
		<slice material = "Silicon" thickness = "0.002*cm" sensitive = "yes" />
	</layer>
	<layer id="2" inner_r = "2.5*cm" outer_z = "6.25*cm">
		&lt;slice material = "Silicon" thickness = "0.008*cm"/>
		&lt;slice material = "Silicon" thickness = "0.002*cm" sensitive = "yes" />
	</layer>
	</detec>
</detector>
  1. 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-&gt;name, (const xmlChar *) "detector"))

    vérifié sinon on sort du programme..

  2. 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.

  3. 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:

Tags: , ,

Switch to our mobile site