2010-01-25 7 views
1

En utilisant simplexml, est-il possible d'obtenir les enfants d'un nœud en fonction des attributs du parent. Par exemple, je veux obtenir une liste des variantes myItem1 (sortie serait petite, grande)Utilisation de simplexml pour obtenir un nœud (et ses enfants) par attribut

Voici quelques pseudo-code de ce que je suis après:

foreach($xml->xpath('//family[@name="myItem1"]')->variants->children() as $child) { 
    $child->getName() 
} 

(Bien sûr, ce doesn « t travail, mais nous espérons qu'il décrit ce que je suis en train de faire)

XML Exemple:.

<library> 
<family name="myItem1"> 
    <variants> 
    <small> 
    ... 
    </small> 
    <large> 
    ... 
    </large>  
    </variants> 
</family> 
<family name="myItem2"> 
    <variants> 
    <small> 
    ... 
    </small> 
    <medium> 
    ... 
    </medium> 
    </variants> 
</family> 
</library> 

Merci.

+0

Il ne décrit pas vraiment ce que vous voulez atteindre. Veuillez poster un exemple de document XML et quelques exemples de ce que seraient les «variantes». –

+0

Désolé, je n'ai pas formaté mon article correctement. Il montre maintenant. –

+0

duplication possible de [SimpleXML: sélection d'éléments ayant une certaine valeur d'attribut] (http://stackoverflow.com/questions/992450/simplexml-selecting-elements-which-have-a-certain-attribute- value) – hakre

Répondre

1

Si je comprends bien, vous voulez obtenir les noms de tous les enfants d'un nœud donné. Il y a différentes façons de le faire, l'un d'eux est à itérer sur tous les enfants, comme ceci:

foreach ($xml->xpath('//family[@name="myItem1"]') as $family) 
{ 
    $variants = array(); 
    foreach ($family->variants->children() as $name => $node) 
    { 
     $variants[] = $name; 
    } 

    // in case there are duplicates you can do 
    $variants = array_unique($variants); 

    var_dump($variants); 
} 
+0

Merci . Cela fonctionne parfaitement. –

0

Essayez l'expression XPath suivante:

//family[@name="myItem1"]/variants/* 
Questions connexes