2009-07-06 3 views
1

Étant donné que SQL est une entrée, je dois interroger une base de données PostgreSQL et renvoyer les résultats au format XML. Je l'ai fait avec le code suivant:Transformation des résultats de PostgreSQL Query en XML, en utilisant PHP DOM

<?php 

$link = "host=localhost dbname=company user=pgsql password=password"; 
$connect = pg_connect($link); 

$query = "SELECT * FROM customer"; 
$result = pg_query($connect, $query); 

$doc = new DomDocument("1.0"); 

$root = $doc->createElement('data'); 
$root = $doc->appendChild($root); 

while($row = pg_fetch_assoc($result)){ 
    $node = $doc->createElement('collection'); 
    $node = $root->appendChild($node); 

    foreach($row as $fieldname => $fieldvalue){ 
     $node->appendChild($doc->createElement($fieldname, $fieldvalue)); 
    } 
} 

$doc->save("cust.xml"); 

?> 

Finalement, j'appliquerai une feuille de style CSS directement au document XML. Je vais spécifier les informations de style pour chaque noeud 'collection'. Cependant, il est possible qu'il y ait des sous-collections de collections, et même des sous-sous-collections et ainsi de suite.

(donc: Maître, détail, sous-détail, sous-sous-détail, etc.)

Le problème est, mon code ne génère XML Master, détail, sous-détail. Comment puis-je modifier mon code afin que le XML généré «capture» toujours tous les niveaux des données?

... Merci


Oui, je fais référence à une relation hiérarchique. Par exemple, avec mon code actuel, je peux voir tous les attributs, des champs, de la table "Client". Cependant, que se passerait-il si l'un des attributs du client était «Adresse» et que le client avait plusieurs adresses? Cela devrait apparaître comme ...

<data> 
    <collection> 
    <fname>Joe</fname> 
    <lname>Smith</lname> 
    <address> 
     <address A> 123...</address A> 
     <address B> 234...</address B> 
    </collection> 
</data> 

Je suis en train de modifier mon code pour « pick up » sur le fait que l'adresse, bien qu'un attribut, a sous-attributs ...

Répondre

3

Tout d'abord, vous pouvez envisager d'effectuer votre mappage XML dans Postgres lui-même en utilisant le functions intégré disponible. Deux avantages de ceci sont que votre fonctionnalité d'abstraction de données reste ensemble et que Postgres est bien mieux optimisé pour effectuer cette tâche efficacement que PHP. Si vous devez faire une modification de niveau supérieur du xml, xslt devrait faire l'affaire.

En ce qui concerne le problème que vous mentionnez, je ne suis pas sûr si vous faites référence aux données dans le tableau ayant une relation hiérarchique?

Questions connexes