2010-06-07 8 views
1

Bonjour, j'ai réussi à créer mon analyseur Tout fonctionne très bien sauf une chose puisque mon xml est formulé un peu différent et je suis totalement perdu sur la façon d'attribuer une variable aux enfants de <photos>.analyse xml avec php, enfants

+1

Je ne sais pas ce que votre code est censé faire et quelle est ta question? Vous voulez lire la structure XML donnée et stocker les informations équivalentes dans une table de base de données, n'est-ce pas? J'ai remarqué que vous concaténez les données de caractères dans la chaîne $ photos, mais ne l'utilisez jamais plus tard. Est-ce que c'est votre problème? – mkluwe

+0

oui exactement .......... –

Répondre

2

Je pense que l'analyse des données XML dans une structure arborescente serait utile. Je l'ai fait pour vous, regardez ici:

<?php 
$data = ' 
<item> 
    <url /> 
    <name /> 
    <photos> 
    <photo>1020944_0.jpg</photo> 
    <photo>1020944_1.jpg</photo> 
    <photo>1020944_2.jpg</photo> 
    </photos> 
    <user_id /> 
</item>'; 

$tree = array(); 
$stack = array(&$tree); 

function startElement($parser, $name, $attrs) { 
    global $stack; 
    $t = &$stack[ count($stack) - 1 ]; 
    $t[ $name ][] = array(); 
    $n = count($t[ $name ]); 
    array_push($stack, &$t[ $name ][ $n - 1 ]); 
} 

function endElement($parser, $name) { 
    global $stack; 
    array_pop($stack); 
} 

function characterData($parser, $data) { 
    global $stack; 
    $t = &$stack[ count($stack) - 1 ]; 
    $t[ '#CDATA' ] = trim($data); 
} 

$xml_parser = xml_parser_create(); 
xml_set_element_handler($xml_parser, "startElement", "endElement"); 
xml_set_character_data_handler($xml_parser, "characterData"); 
xml_parse($xml_parser, $data, TRUE); 

foreach($tree[ 'ITEM' ][ 0 ][ 'PHOTOS' ][ 0 ][ 'PHOTO' ] as $photo) { 
    echo "{$photo[ '#CDATA' ]}\n"; 
} 
?> 

En fait, je (amateur) réimplémentées ce SimpleXML vous donne déjà:

<?php 
$xml = new SimpleXMLElement($data); 
foreach($xml->photos->photo as $photo) { 
    echo "$photo\n"; 
} 
?> 
+0

+/- 0, la meilleure solution serait d'utiliser simplement la bibliothèque SimpleXML, l'analyser vous-même est inutile (sauf si le XML est très gros (> 10 Mo) et c'est horrible maintenir une telle solution. – dbemerlin