2009-11-19 6 views
1

Salut là j'ai le code XML suivant:Tri des données XML dans PHP4

<?xml version="1.0" encoding="UTF-8"?> 
<connector_ret> 
    <function name="search"> 
    <row id="1"> 
     <col id="1">AAA</col> 
     <col id="2">243168</col> 
     <col id="3">090828-000300</col> 
     <col id="4">Subject</col> 
    </row> 
    <row id="2"> 
     <col id="1">BBB</col> 
     <col id="2">243515</col> 
     <col id="3">090831-000116</col> 
     <col id="4">Subject</col> 
    </row> 
    <row id="3"> 
     <col id="1">BBB</col> 
     <col id="2">244913</col> 
     <col id="3">090905-000022</col> 
     <col id="4">Subject</col> 
    </row> 
    <row id="4"> 
     <col id="1">CCC</col> 
     <col id="2">245323</col> 
     <col id="3">090907-000253</col> 
     <col id="4">Subject</col> 
    </row> 
    <row id="5"> 
     <col id="1">CCC</col> 
     <col id="2">245323</col> 
     <col id="3">090907-000253</col> 
     <col id="4">Subject</col> 
    </row> 
    </function> 
</connector_ret> 

Je me demandais s'il était possible de boucle à travers cela dans PHP4 et afficher uniquement certaines lignes lorsque donné une variable. Par exemple, si la variable donnée est BBB, alors seulement afficher les lignes où l'id de la première colonne est également égale à BBB.

Ainsi, la sortie serait:

BBB - 243515 - 090831-000116 - Sujet BBB - 244913 - 090905-000022 - Sujet

et les autres lignes sont tout simplement ignorés.

Si la variable donnée est AAA la sortie serait:

AAA - 243168 - 090828-000300 - Sujet

Vous avez l'idée :)

Si vous pouvez aider ce serait fantastique. Merci beaucoup.

+1

@Pete: juste une remarque PHP4 est mort pour que vous devriez penser à la mise à niveau – RageZ

+0

Croyez-moi, il ferait les choses beaucoup plus facile, mais essayer de le faire à travailler pour passer à 5 est presque impossible. –

+0

@Pete: Je suis à peu près dans la même situation ici, j'ai installé les deux PHP5/PHP4 sur le serveur web donc au moins toutes les nouvelles choses sont en PHP5. Le problème si vous ne démarrez pas vous ne pouvez pas migrer ;-) – RageZ

Répondre

2

vous devez utiliser xpath pour faire un tel traitement

$dom =domxml_open_mem($xml); 
$calcX = &$dom->xpath_new_context(); 
$xml_parsed["match"]= node_content(
    $calcX->xpath_eval("//row/col[@id=1][text()='BBB']") 
); 
+0

Y a-t-il des prérequis à cela? J'ai le sentiment qu'Il a désactivé les modules nécessaires pour cela, car PHP exécute la fonction domxml_open_mem. –

+0

ouais le domxml est une extension PECL, mais sur la plupart des distributions modernes (Ubuntu, debian, centos) vous pouvez installer un paquet, voir http://www.php.net/manual/fr/domxml.installation.php pour PHP installez – RageZ

+0

Merci pour cela. Y at-il une solution pour cela hors de la boîte? J'ai peur d'essayer d'amener les TI à ajouter des extensions supplémentaires qui pourraient avoir des problèmes. Sinon, je suppose que c'est la seule façon de m'y prendre. Merci encore! –

0

Vous pourriez considérer XSL-T comme votre solution à cela. Il est assez facile de sélectionner les nœuds que vous voulez et de transformer les résultats.

+0

Le problème est que le XML est généré par une API tierce et en tant que tel, je ne peux travailler qu'avec la sortie XML que j'ai. –

+0

@Bernard: XSL-T est disponible hors de la boîte seulement en PHP5 et pour faire de telles choses tout 'Xpath' est assez à mon humble avis – RageZ