2017-03-02 3 views
0

J'ai un fichier xml qui ressemble à ceci: (les noms sont fictifs)XML simple à trouver le parent sur plusieurs niveaux au-dessus avec PHP

<base> 
<subbase> 
    <item> 
    <childItem> 
     <childItemLevel1> 
      <childItemLevel2>Value 1 </childItemLevel2> 
      <childItemLevel2>Value 2 </childItemLevel2> 
      <childItemLevel2>Value 3 </childItemLevel2> 
     </childItemLevel1> 
     <childItemLevel1> 
      <childItemLevel2>Value 10 </childItemLevel2> 
      <childItemLevel2>Value 20 </childItemLevel2> 
      <childItemLevel2>Value 30 </childItemLevel2> 
     </childItemLevel1> 
    </childItem> 
    </item> 
</subbase> 
</base> 

J'utilise SimpleXML et je ne peux pas comprendre comment je peux obtenir la parent à plus d'un niveau.

Par exemple:

Je suis au <childItemLevel2>Value 10</childItemLevel2>.

Comment puis-je accéder au parent <item> et l'imprimer?

Merci d'avance.

Répondre

1

Avec axes Xpath.

$base = new SimpleXMLElement($xml); 

$child = $base->xpath('.//childItemLevel2[contains(., "Value 10")]')[0]; 

var_dump($child->asXml()); 

$parent = $child->xpath('ancestor::item[1]')[0]; 

var_dump($parent->asXml()); 

sortie:

string(44) "<childItemLevel2>Value 10 </childItemLevel2>" 
string(484) "<item> 
    <childItem> 
     <childItemLevel1> 
      <childItemLevel2>Value 1 </childItemLevel2> 
      <childItemLevel2>Value 2 </childItemLevel2> 
      <childItemLevel2>Value 3 </childItemLevel2> 
     </childItemLevel1> 
     <childItemLevel1> 
      <childItemLevel2>Value 10 </childItemLevel2> 
      <childItemLevel2>Value 20 </childItemLevel2> 
      <childItemLevel2>Value 30 </childItemLevel2> 
     </childItemLevel1> 
    </childItem> 
    </item>" 

ancestor est un axe qui contient un noeud quelconque dans la hiérarchie du nœud d'élément de document. ancestor::item sélectionnera tout ce qui s'appelle item sur cet axe. ancestor::item[1] sélectionne le premier (le plus proche) de cette liste.