2010-04-17 5 views
2

J'utilise le XPath en PHP 5 pour analyser un document XML. Le problème que j'ai écrit un foreach pour afficher correctement le tableau suivant:Ecrire une boucle foreach pour tableau de SimpleXMLElements

document XML exemple

valeur 1 valeur 2

  $xmlfile = 'link_to_file.xml';      
      $xmlRaw = file_get_contents($xmlfile);  
      $xml = new SimpleXMLElement($xmlRaw); 
      $install_files = $xml->xpath('//files'); 
      foreach($install_files as $row) 
      { 
       echo $row['file']; 
      } 

// var_dump pour la ligne de $ donne le suivant

   array(1) { 
        [0]=> 
        object(SimpleXMLElement)#21 (2) { 
        ["file"]=> 
        string(12) "value 1" 
        ["folder"]=> 
        string(8) "value 2" 
        } 
       } 

Idéalement je voudrais obtenir la valeur en utilisant $row['file'] ou $row['folder']. Merci pour toute aide.

+1

@mjames, est-ce lié devoirs? – Kiril

+0

C'est en fait pour un script que je crée. – mjames

+0

cool ... juste en vérifiant, le titre semblait un peu "devoirs-ish". – Kiril

Répondre

2

Les éléments de votre tableau sont SimpleXMLElement objets. Vous pouvez accéder à leur properties avec la syntaxe $object->property. Donc, essayez ceci:

foreach ($array as $row) { 
    echo $row->folder . $row->file; 
} 
+0

Merci, je ne me suis pas rendu compte que je devais l'utiliser sous forme d'objet -> fichier au lieu de ['fichier]. Fonctionne très bien maintenant :) – mjames

0

Si je comprends votre exemple correctement,

foreach ($array as $row) 
{ 
    // do something with $row['file'] or $row['folder'] 
} 
0

Si vous voulez traiter un seul élément que vous ne devez pas nécessairement une boucle, mais il ne fait pas mal non plus.
Selon votre sortie file et folder sont les éléments enfants de l'élément renvoyé pour votre requête xpath. Vous pouvez y accéder via $parentElement->childElement. Si elles étaient des attributs que vous utiliseriez $element['attributeName']

$foo = new SimpleXMLElement(getData()); 

foreach($foo->xpath('row[@id="r2"]') as $row) { 
    echo $row->file, " | ", $row->folder, "\n"; 
} 
echo "-----\n"; 

// same thing if you have more than one element in your result set 
foreach($foo->xpath('row[@id="r2" or @id="r3"]') as $row) { 
    echo $row->file, " | ", $row->folder, "\n"; 
} 

function getData() { 
    return '<foo> 
    <row id="r1"> 
     <file>value 1.1</file> 
     <folder>value 1.2</folder> 
    </row> 
    <row id="r2"> 
     <file>value 2.1</file> 
     <folder>value 2.2</folder> 
    </row> 
    <row id="r3"> 
     <file>value 3.1</file> 
     <folder>value 3.2</folder> 
    </row> 
    </foo>'; 
} 

impressions

value 2.1 | value 2.2 
----- 
value 2.1 | value 2.2 
value 3.1 | value 3.2 
+0

Cela a été très utile aussi, merci :) – mjames