2010-03-17 6 views
0

j'ai exemple suivant xml:aide parsing XML en utilisant php

<entity id="1"> 
    <name>computer</name> 
    <type>category</type> 
    <entities> 
     <entity id="2"> 
      <name>mac</name> 
      <type>category</type> 
     </entity> 
     <entity id="3"> 
      <name>linux</name> 
      <type>category</type> 
      <entities> 
       <entity id="4"> 
        <name>ubuntu</name> 
        <type>category</type> 
       </entity> 
       <entity id="5"> 
        <name>redhat</name> 
        <type>category</type> 
        <entities> 
         <entity id="6"> 
          <name>server</name> 
          <type>category</type> 
         </entity> 
         <entity id="7"> 
          <name>desktop</name> 
          <type>category</type> 
         </entity> 
        </entities> 
       </entity> 
      </entities> 
     </entity> 
    </entities> 
</entity> 

si j'ai une carte d'identité, permet de dire 5. est-il possible de récupérer les éléments suivants:

  • le nom de l'entité avec l'id = 5 (redhat)
  • Toutes les entités enfants et leur identifiant et nom (6: serveur et 7: bureau)
  • toutes les entités parentes et leur identifiant et nom (1: ordinateur , 2: mac et 3: linux)

Im un noob sur l'analyse XML. est-ce accompli par xpath seulement ou xquery/xpath?

J'apprécierais que quelqu'un puisse me donner un exemple de code pour le faire avec simplexml.

merci!

+0

Vous pouvez utiliser le DOM. Reportez-vous à [ce lien] (http://in.php.net/manual/fr/book.dom.php). – Pavunkumar

Répondre

1
<?php 
$simpleXml = simplexml_load_string($xml); // or load your file, whatever 

if (($element = $simpleXml->xpath('//*[@id = 5]'))) { 
    var_dump($element); 
    echo 'Element and descendants: ', $element[0]->asXML(), PHP_EOL; 
    echo 'Name of the entity: ', $element[0]->name, PHP_EOL; 
}

SimpleXML offre un traitement XML vraiment intuitif, mais il est plus limité que les DOM complètes des classes.