parser un document xml
3 messages
• Page 1 sur 1
- dudo
- WRInaute occasionnel

- Messages: 453
- Inscription: 10 Jan 2004
parser un document xml
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.
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

- Messages: 273
- Inscription: 21 Oct 2005
Il me semble que ceci fonctionnera à la suite de ton test SUMMARY :
(y'a qu'a fait un print_r($vals) en fait pour voir le contenu de la variable.)
- 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

- Messages: 83
- Inscription: 17 Juil 2004
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.
- 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
?>
3 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout, Google Writely
Qui est en ligne
Utilisateurs parcourant ce forum: khymo1 et 2 invités
