je débute actuellement dans le parsing XML sous PHP, et je me suis
arrêté sur XPath et la classe XPath.class.php qui permet de manipuler
facilement (?) cela.
Je récupère un fichier XML qui ressemble à çà
<ItemLookupResponse>
<Item>
...
<CustomerReviews>
<Review>
<Rating>4</Rating>
<Summary>Ceci est un titre</Summary>
...
</Review>
<Review>
<Rating>3</Rating>
<Summary>Ceci est un titre</Summary>
...
</Review>
<Review>
<Rating>2</Rating>
<Summary>Ceci est un titre</Summary>
...
</Review>
</CustomerReviews>
...
</Item>
</ItemLookupResponse>
Je souhaite donc enregistré les différentes info concernant les
Review(s).
je peux faire comme ceci:
require_once('include/XPath.class.php');
$xml = url de mon fichier XML;
$xpath->new XPath($xml);
et ainsi de suite pour tous les champs fils de mon noeud Review ... je
cherche donc une façon plus rapide et plus élégante de faire cela
mais je coince
voici comment je pensais faire
$xpath = new XPath($xml);
$node = $xpath->match("//CustomerReviews/Review/");
et à partir de là je ne sais pas comment faire pour récupérer les
fils ... relativement à $node. Une idée ? un exemple ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
m-e-
"kalooni" a écrit dans le message de news:
[...]
voici comment je pensais faire
$xpath = new XPath($xml); $node = $xpath->match("//CustomerReviews/Review/");
et à partir de là je ne sais pas comment faire pour récupérer les fils ... relativement à $node. [...]
(si on parle bien de http://sourceforge.net/projects/phpxpath/) Par ma compréhension de la documentation (voir notamment dans l'introduction, la structure des tableaux décrivant des noeuds), je suppose que ceci est une bonne piste :
<?php $datasFromXml = array(); $xpath = new XPath($xml); $nodeCollection = $xpath->match("//CustomerReviews/Review/"); foreach ($nodeCollection as $node) { foreach ($node['childNodes'] as $childNode) { $name = $childNode['name']; if (! isset($datasFromXml[$name])) { $datasFromXml[$name] = array(); } $datasFromXml[$name][] = $xpath->getData($childNode['xpath']); } } ?>
Cela vous aide-t-il ?
"kalooni" <kalooni@gmail.com> a écrit dans le message de news:
1123769433.801923.225590@z14g2000cwz.googlegroups.com...
[...]
voici comment je pensais faire
$xpath = new XPath($xml);
$node = $xpath->match("//CustomerReviews/Review/");
et à partir de là je ne sais pas comment faire pour récupérer
les
fils ... relativement à $node.
[...]
(si on parle bien de http://sourceforge.net/projects/phpxpath/)
Par ma compréhension de la documentation (voir notamment dans
l'introduction, la structure des tableaux décrivant des noeuds),
je suppose que ceci est une bonne piste :
<?php
$datasFromXml = array();
$xpath = new XPath($xml);
$nodeCollection = $xpath->match("//CustomerReviews/Review/");
foreach ($nodeCollection as $node) {
foreach ($node['childNodes'] as $childNode) {
$name = $childNode['name'];
if (! isset($datasFromXml[$name])) {
$datasFromXml[$name] = array();
}
$datasFromXml[$name][] =
$xpath->getData($childNode['xpath']);
}
}
?>
$xpath = new XPath($xml); $node = $xpath->match("//CustomerReviews/Review/");
et à partir de là je ne sais pas comment faire pour récupérer les fils ... relativement à $node. [...]
(si on parle bien de http://sourceforge.net/projects/phpxpath/) Par ma compréhension de la documentation (voir notamment dans l'introduction, la structure des tableaux décrivant des noeuds), je suppose que ceci est une bonne piste :
<?php $datasFromXml = array(); $xpath = new XPath($xml); $nodeCollection = $xpath->match("//CustomerReviews/Review/"); foreach ($nodeCollection as $node) { foreach ($node['childNodes'] as $childNode) { $name = $childNode['name']; if (! isset($datasFromXml[$name])) { $datasFromXml[$name] = array(); } $datasFromXml[$name][] = $xpath->getData($childNode['xpath']); } } ?>