parser un document xml

dudo

WRInaute impliqué
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:
<?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 />";
 

ChezThierry

WRInaute occasionnel
Il me semble que ceci fonctionnera à la suite de ton test SUMMARY :
Code:
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
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:
<?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
?>
 

Discussions similaires

Haut