2017-02-10 3 views
2

Donc, j'ai un fichier XML qui ressemble à ceci (Les noms sont fictifs):Comment obtenir un enfant en particulier à partir d'un fichier XML et montrer ses enfants sur un div avec PHP

<myxmlfile> 
    <infos> 
    <item> 
     <itemChild1>foo1</itemChild1> 
     <itemChild2>foo2</itemChild2> 
    </item> 
    <item> 
     <itemChild1>foo1</itemChild1> 
     <itemChild2>foo2</itemChild2> 
    </item> 
    <item> 
     <itemChild1>foo1</itemChild1> 
     <itemChild2>foo2</itemChild2> 
    </item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <infos> 
</myxmlfile> 

Mon but est prendre par exemple SEULEMENT le troisième <item>, et montrer sur mon navigateur ses enfants. Comment puis-je y parvenir?

Jusqu'à présent, j'ai ceci:

PHP

<?php 
$divId = 0; 
$url ='myxml.xml'; 
$xml = simplexml_load_file($url) or die ("Can't connect to URL"); 
?> 
+1

Avez-vous lu la [documentation SimpleXML] (http://php.net/manual/fr/book.simplexml.php)? Je suis sûr que vous trouverez tout ce que vous cherchez. – roberto06

Répondre

2

La façon la plus simple d'accéder aux valeurs de nœud de votre XML serait d'utiliser l'opérateur d'objet ainsi que votre nom de noeud par exemple $xml->myxmlfile

$xml_data = ' 
    <myxmlfile> 
     <infos> 
     <item>foo1</item> 
     <item>foo2</item> 
     <item>foo3</item> 
     <item>foo4</item> 
     <item>foo5</item> 
     </infos> 
    </myxmlfile> 
'; 

$xml = new SimpleXMLElement($xml_data); 

foreach($xml->infos->item as $k=>$v) { 

    echo $v . '<br>'; 

} 

Sortie:

foo1 
foo2 
foo3 
foo4 
foo5 

Voir: http://php.net/manual/en/book.simplexml.php

+0

Ce n'est pas ce dont j'ai besoin, vous voyez, ceux ont plus de balises, par exemple . Je ne veux que le troisième, pas toute la liste. Comment puis-je réaliser cela? –

0

Je vous suggère d'utiliser DOM extension avec XPath requêtes. Votre question ne précise pas exactement ce que vous essayez d'atteindre, alors voici quelques exemples:

$doc = new DOMDocument(); 
$doc->loadXML($xml); 
$xpath = new DOMXPath($doc); 
// query 3rd item and get the first match 
$item = $xpath->query("/myxmlfile/infos/item[3]")->item(0); 
// dump item as an XML 
echo $doc->saveXML($item) . "\n"; 
// iterate all children of the item and work with nodes directly 
foreach ($xpath->query("./*", $item) as $node) { 
    printf("%s has a value of %s\n", $node->nodeName, $node->nodeValue); 
} 
// iterate all children and dump nodes as an HTML 
foreach ($xpath->query("./*", $item) as $node) { 
    echo $doc->saveHTML($node) . "\n"; 
} 

Cette imprime les éléments suivants:

<item> 
    <itemChild1>foo1</itemChild1> 
    <itemChild2>foo2</itemChild2> 
</item> 
itemChild1 has a value of foo1 
itemChild2 has a value of foo2 
<itemChild1>foo1</itemChild1> 
<itemChild2>foo2</itemChild2>