2010-04-06 9 views
0

Voici le XML avec lequel je travaille - il y a plus d'éléments - c'est le premier ensemble. Comment puis-je obtenir ces éléments dans un tableau? J'ai essayé avec SimpleXML de PHP etc. mais je ne peux pas le faire.PHP: Comment stocker des données XML dans un tableau?

<response xmlns:lf="http://api.lemonfree.com/ns/1.0"> 
    <lf:request_type>listing</lf:request_type> 
    <lf:response_code>0</lf:response_code> 
    <lf:result type="listing" count="10"> 
    <lf:item id="56832429"> 
     <lf:attr name="title">Used 2005 Ford Mustang V6 Deluxe</lf:attr> 
     <lf:attr name="year">2005</lf:attr> 
     <lf:attr name="make">FORD</lf:attr> 
     <lf:attr name="model">MUSTANG</lf:attr> 
     <lf:attr name="vin">1ZVFT80N555169501</lf:attr> 
     <lf:attr name="price">12987</lf:attr> 
     <lf:attr name="mileage">42242</lf:attr> 
     <lf:attr name="auction">no</lf:attr> 
     <lf:attr name="city">Grand Rapids</lf:attr> 
     <lf:attr name="state">Michigan</lf:attr> 
     <lf:attr name="image">http://www.lemonfree.com/images/stock_images/thumbnails/2005_38_557_80.jpg</lf:attr> 
     <lf:attr name="link">http://www.lemonfree.com/56832429.html</lf:attr> 
    </lf:item> 
    <!-- more items --> 
    </lf:result> 
</response> 

Merci les gars

EDIT: Je veux que les premiers éléments de données dans un format facile à accéder à des variables, j'ai lutté pendant deux ou trois jours pour SimpleXML de travailler comme je suis nouveau à PHP, Je pensais que manipuler un tableau est plus facile à faire.

+0

Si vous présentez (la partie pertinente) le code SimpleXML vous avez jusqu'à présent, les gens peuvent remarquer où vous avez eu tort. Je pense qu'il est utile d'essayer de le faire fonctionner en XML au lieu de l'aplatir dans un tableau bête. – Tomalak

+0

Si vous avez besoin de travailler avec les données, il est préférable de travailler avec lui comme un objet simplexml, qui peut être manipulé comme un tableau si vous le souhaitez. – null

Répondre

0

Peut-être que vous devriez regarder SimplePie, il analyse les flux XML dans un tableau ou un objet (enfin, l'un des deux: D). Je pense que cela fonctionne bien pour les espaces de noms et les attributs aussi.

Certains avantages incluent sa licence GPL (c'est gratuit) et sa communauté de support.

+0

Et comment le XML donné est-il un fil de nouvelles? – Gordon

+0

voici le lien utilisé pour récupérer le xml: http://api.lemonfree.com/listings?key=fd72eb830bafd4b1b766c2be38a136ab&make=ford&model=mustang – tommy

+0

@tommy: Ce n'est pas une bonne idée de partager votre clé API ouvertement sur Internet . Si j'étais vous je supprimerais le commentaire ci-dessus. – Tomalak

1

Pourquoi les voulez-vous dans un tableau? Ils sont déjà structurés, utilisez-les directement en XML.

Il ya SimpleXML et DOMDocument, maintenant cela dépend de ce que vous voulez faire avec les données (vous avez omis de le mentionner) qui vous sert mieux. Développez votre question pour obtenir des exemples de code.


EDIT: Voici un exemple de la façon dont vous pouvez gérer votre document avec SimpleXML:

$url  = "http://api.lemonfree.com/listings?key=xxxx&make=ford&model=mustang"; 
$ns_lf = "http://api.lemonfree.com/ns/1.0"; 
$response = simplexml_load_file($url); 

// children() fetches all nodes of a given namespace 
$result = $response->children($ns_lf)->result; 

// dump the entire <lf:result> to see what it looks like 
print_r($result); 

// once the namespace was handled, you can go on normally (-> syntax) 
foreach ($result->item as $item) { 
    $title = $item->xpath("lf:attr[@name='title']"); 
    $state = $item->xpath("lf:attr[@name='state']"); 

    // xpath() always returns an array of matches, hence the [0] 
    echo($title[0].", ".$state[0]); 
} 
+0

Je veux les premières données de données dans des variables faciles d'accès, j'ai lutté pendant quelques jours pour que SimpleXML fonctionne comme je suis nouveau sur PHP, donc je pensais que manipuler un tableau est plus facile à faire. – tommy

+0

@tommy: S'il vous plaît mettre en place un petit échantillon de code de votre code SimpleXML non-travail et postez-le dans votre question. Vous ne pouvez pas être loin de la solution, je soupçonne que l'espace de noms XML est le seul holdup. – Tomalak

0

SimpleXML est la meilleure façon de fichiers XML de lecture/écriture. Habituellement, c'est aussi simple que d'utiliser des tableaux, sauf dans votre cas, car il y a des espaces de noms XML impliqués et cela complique les choses. De plus, le format utilisé pour stocker les attributs est un peu bizarre, donc au lieu d'être facile à utiliser et évident, c'est plutôt compliqué, alors voici ce que vous cherchez pour pouvoir faire quelque chose de plus intéressant:

$response = simplexml_load_file($url); 

$items = array(); 
foreach ($response->xpath('//lf:item') as $item) 
{ 
    $id = (string) $item['id']; 
    foreach ($item->xpath('lf:attr') as $attr) 
    { 
     $name = (string) $attr['name']; 
     $items[$id][$name] = (string) $attr; 
    } 
} 

Vous aurez tout ce dont vous avez besoin dans le tableau $items, utilisez print_r() pour voir ce qu'il y a dedans. $url devrait être l'URL de cette chose API sans citron. Le code suppose qu'il ne peut pas y avoir plusieurs valeurs pour un attribut (par exemple plusieurs images).

Bonne chance.

0

C'est ainsi que j'ai analysé le XML renvoyé par le système de carnet d'adresses d'un client dans un tableau afin de pouvoir l'utiliser sur une page. utilise un analyseur XML qui fait partie de PHP, je pense.

voici sa documentation http://www.php.net/manual/en/ref.xml.php

$user_info = YOUR_XML 

SETS $xml_array AS ARRAY 
$xml_array = array(); 

// SETS UP XML PARSER AND PARSES $user_info INTO AN ARRAY 
$xml_parser = xml_parser_create(); 

xml_parse_into_struct($xml_parser, $user_info, $values, $index); 

xml_parser_free($xml_parser); 

foreach($values as $key => $value) 
{ 
    // $value['level'] relates to the nesting level of a tag, x will need to be a number 
    if($value['level']==x) 
    { 
     $tag_name = $value['tag']; 
     // INSERTS DETAILS INTO ARRAY $contact_array SETTING KEY = $tag_name VALUE = value for that tag 
     $xml_array[strtolower($tag_name)] = $value['value']; 
    } 
} 

Si vous var_dump (valeurs $), vous devriez voir quel niveau les données que vous êtes info est, je pense que ce sera 4 pour le XML ci-dessus, de sorte que vous peut alors filtrer tout ce que vous ne voulez pas en changeant la valeur de $ value ['level'] == x au niveau requis, ie. $ value ['level'] == 4. Cela devrait retourner $ xml_array comme un tableau avec $ xml_array ['title'] = 'Utilisé 2005 Ford Mustang V6 Deluxe' etc.

espoir qui aide certains

Questions connexes