ASP.Net / C# / JAVA / CSS / AJAX / JS / SL

XML
PHP

La structure du fichier ressemble à ceci et mon but est d’extraire les nodes String qui contiennent le user-agent et d’en créer une liste :

<?xml version= »1.0″?>
<user-agents>
<user-agent>
<ID>id_moz_150408_3</ID>
<String>Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5</String>
<Description>Mozilla Firefox 3.0 beta (Gran Paradiso) for Win</Description>
<Type>B</Type>
<Comment></Comment>
<Link1>http://developer.mozilla.org/en/docs/Firefox_3_for_developers</Link1&gt;
<Link2></Link2>
</user-agent>

XMLReader
XMLReader est peut-être le plus compliqué à comprendre. On lit chaque node en boucle. Chacun possède un type (élément, attribut, texte, etc) qui doit être comparé avec les constantes prédéfinies. Ici, je recherche les éléments dont le nom est String.

$reader = new XMLReader();
$reader->open(‘allagents.xml’);

while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT){
if ($reader->name == « String »){
$reader->read();
echo $reader->value . « \n »;
}
}
}

$reader->close();

DOMDocument
Celui-ci est un peu plus simple, principalement parce qu’on peut utiliser un sélecteur pour obtenir d’un seul coup tous les nodes du document qui portent le nom user-agent. Ensuite, il suffit de boucler sur l’array et d’extraire le contenu du node qui porte le nom String. La fonction getElementsByTagName() retourne dans un array tous les éléments du node user-agent qui portent ce nom. Il n’en contient qu’un seul, c’est pourquoi on doit y faire référence par item(0).

$doc = new DOMDocument();
$doc->load( ‘allagents.xml’ );

$nodes = $doc->getElementsByTagName( « user-agent » );

foreach($nodes as $ua) {
$string = $ua->getElementsByTagName( « String » );
echo $string->item(0)->nodeValue . « \n »;
}

SimpleXML
Encore mieux, SimpleXML rend l’opération plus facile. On peut utiliser xpath pour obtenir les nodes (au lieu de getElementsByTagName) en utilisant une syntaxe correspondant à la structure du fichier. Ensuite, on peut accéder aux propriétés de chaque node de la même façon qu’on le fait avec un objet (flèche).

$xml = new SimpleXMLElement(‘allagents.xml’, Null, True);

// yeah! xpath!
$nodes = $xml->xpath(‘//user-agents/user-agent’);

foreach($nodes as $ua) {
// attention, l’appel à String est case sensitive !
echo $ua->String . « \n »;
}

Conclusion

Ceci représente l’essentiel de la lecture XML. Le traitement peut être plus complexe selon le cas mais ça donne quand même un aperçu des alternatives. J’espère que j’ai pu vous aider à démêler tout ça et à choisir la forme la plus appropriée pour vos besoins.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :