2010-10-13 19 views
0

J'espère vraiment que quelqu'un pourra m'aider avec ça. Fondamentalement, j'essaye d'analyser certains attributs XML dans un arbre XML basé sur d'autres attributs dans cette branche.Analyse syntaxique des attributs XML avec PHP

À titre d'exemple du type de XML Je travaille avec: -

<root> 
<employees> 
    <team id="1643"> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1364"/> 
    <member id ="153461" jobtype="temporary" division="reception" rollnumber="1326"/> 
    <member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1312"/> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1326"/> 
    </team> 
    <team id="1633"> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1244"/> 
    <member id ="153461" jobtype="temporary" division="reception" rollnumber="1569"/> 
    <member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1472"/> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1112"/> 
    </team> 
    <team id="1674"> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1488"/> 
    <member id ="153461" jobtype="temporary" division="reception" rollnumber="1032"/> 
    <member id ="153461" jobtype="parttime" division="cleaning" rollnumber="1886"/> 
    <member id ="153461" jobtype="permament" division="cleaning" rollnumber="1445"/> 
    </team> 
</employees> 
</root> 

Ce que je suis en train de faire est d'atteindre le rollnumber pour tous les employés qui remplissent certaines catégories. Donc, je veux être en mesure de faire un qui ressemble à "Si jobtype =" permanent "et division =" nettoyage "puis echo rollnumber".

Maintenant, j'ai essayé d'analyser cela avec PHP, et fondamentalement échoué. J'échoué parce que je en utilisant la syntaxe suivante: -

$team->xpath("//member[@jobtype='permament'][@division='cleaning']/@rollnumber") 

Cette analyse comme un tableau. Aucun problème. Je peux retirer les variables du tableau. Aucun problème.

Le problème est ...

... PHP ne peut pas traiter avec des tableaux imbriqués, que le présent code produit. Il contient le tableau initial en mémoire et analyse juste les mêmes variables encore et encore. J'ai essayé de réinitialiser le tableau etc à la fin de chaque boucle, mais cela n'a pas fonctionné. PHP semble seulement capable de détruire le tableau à la fin de la séquence foreach.

J'aimerais vraiment savoir s'il est possible de l'analyser avec PHP? Y a-t-il un travail pour ça? Toute aide/conseil serait grandement appréciée.

Répondre

0

Voilà donc comment je le ferais

// ParseXML.class.php

/** 
* This is the base class to load the XML. 
* Individual scripts should extend this class for 
* explicit functionality 
*/ 

class ParseXML { 
    protected $xml; 

    public function __construct($xml) { 
     if(is_file($xml)) { 
      $this->xml = simplexml_load_file($xml); 
     } else { 
      $this->xml = simplexml_load_string($xml); 
     } 
    } 
} 

// ParseEmployees.extends.php

/** 
* This class extends the parseXML class 
*/ 
class ParseEmployees extends parseXML { 

    public function getRollNumberArray() { 
     $attr = false; 
     $el = $this->xml->xpath("//member[@jobtype='permament'][@division='cleaning']"); 

     if($el && count($el) === 1) { 
      $attr = (array) $el[0]->attributes(); 
      $attr = $attr['@attributes']; 
     } 
     return $attr; 
    } 
} 

Comment utiliser:

// Add xml file/post 
$xml_file = '/path/to/xml_file.xml'; 

// Need to include the two files above 
include('ParseXML.class.php'); 
include('ParseEmployees.extends.php'); 

$emp = new ParseEmployees($xml_file); 
$emp_rollnumber_arr = $emp->getRollNumberArray(); 

// Now you should be able to access the array and see the values 
echo "Employees Role Numbers:<pre>".print_r($emp_rollnumber_arr,true)."</pre><br />"; 
+0

Merci beaucoup. Je dois dire que c'est un peu plus avancé que ce à quoi je suis habitué. – user475018

+0

Puis-je demander si cela doit être intégré dans un cycle foreach pour l'itération de l'arborescence XML? – user475018