parser un document xml

dudo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 453
Inscription: 10 Jan 2004

parser un document xml

Message le Lun Oct 31, 2005 9:44

bjr a tous
voila je parse bien dans un document Xml yahoo, jusqu'a <summary> mais apres
<Thumbnail> et son contenu <Url><Height><Width>, je seche sur le
le bon codage pour parser cette partie et recuperer l'url, height, width dans un print, merci de vos conseils.

Code: Tout sélectionner

<?xml version="1.0" encoding="UTF-8" ?>
- <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:srchmi" ...>
- <Result>
  <Title>madonna 116</Title>
  <Summary>Picture 116 of 184</Summary>
- <Thumbnail>
  <Url>http://scd.mm-b1.yimg.com/image/481989943</Url>
  <Height>125</Height>
  <Width>100</Width>
  </Thumbnail>
  </Result>

$p = xml_parser_create();
xml_parse_into_struct($p, $contents, $vals);
xml_parser_free($p);
$title = array();
$summary = array();

$TOTALRESULTSAVAILABLE = $vals[0]['attributes']['TOTALRESULTSAVAILABLE'];

$resultscount = 0;
for($i=0;isset($vals[$i]);$i++) {
    if($vals[$i]['tag'] == 'TITLE') {
    $title[] = $vals[$i]['value'];
    $resultscount++;
   } elseif($vals[$i]['tag'] == 'SUMMARY') {
       $summary[] = $vals[$i]['value'];
}
}

print "<LI class=v>".$title[$i]."<br />";
print "<LI class=v>".$summary[$i]."<br />";
Dernière édition par dudo le Lun Oct 31, 2005 12:30, édité 1 fois.

ChezThierry
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 273
Inscription: 21 Oct 2005

Message le Lun Oct 31, 2005 10:17

Il me semble que ceci fonctionnera à la suite de ton test SUMMARY :
Code: Tout sélectionner
elseif($vals[$i]['tag'] == 'URL') {
       $url[] = $vals[$i]['value'];
} elseif($vals[$i]['tag'] == 'WIDTH') {
       $width[] = $vals[$i]['value'];
} elseif($vals[$i]['tag'] == 'HEIGHT') {
       $height[] = $vals[$i]['value'];
}


(y'a qu'a fait un print_r($vals) en fait pour voir le contenu de la variable.)

Fluidex
WRInaute discret
WRInaute discret
 
Messages: 83
Inscription: 17 Juil 2004

Message le Lun Oct 31, 2005 14:49

Même s'il est possible de faire le parsing à la main en PHP, personnellement je préconiserais l'utilisation de XSLT qui simplifie considérablement le codage :
- pas de parsing en PHP
- donc pas de boucle, tableaux de variable...
- plus de modularité
et moins de bugs ou de temps de mise au point à mon avis.
Voici le fichier PHP qui convient pour PHP 5 (ça marche aussi en PHP 4, mais les objets et méthodes sont légèrement différents). Il faut penser à activer l'extension --with-xsl.
Code: Tout sélectionner
<?php

//données XML
$xml_file = '<?xml version="1.0" encoding="UTF-8" ?>
<Result>
<Title>madonna 116</Title>
<Summary>Picture 116 of 184</Summary>
<Thumbnail>
  <Url>http://scd.mm-b1.yimg.com/image/481989943</Url>
  <Height>125</Height>
  <Width>100</Width>
</Thumbnail>
</Result>';

//Transformation XSL
$xsl_file = '<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output  omit-xml-declaration = "yes" />
<xsl:template match="/Result" >
<ul><li><xsl:value-of select="./Title"/></li>
<li><xsl:value-of select="./Summary"/>
  <ul><xsl:apply-templates select="./Thumbnail/*"/></ul>
</li></ul>
</xsl:template>
<xsl:template match="Thumbnail/*"><li><xsl:value-of select="."/></li></xsl:template>
</xsl:stylesheet>';

// Application de la transformation
$DomXmlFile = DOMDocument::loadXML($xml_file); //création d'un objet pour les données XML
$DomXslTrans = DOMDocument::loadXML($xsl_file); //création d'un objet pour la transformation XSL
$proc = new XSLTProcessor;            //création du processeur xslt
$proc->importStyleSheet($DomXslTrans);   //le processeur xslt dispose de la transformation xslt
print $proc->transformToXML($DomXmlFile);   // transformation XSLT+ affichage
?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: khymo1 et 2 invités