2009-07-20 8 views
0

J'ai des fonctions en place qui vont convertir les résultats des requêtes sql en XML. Cependant, je veux maintenant pouvoir, en utilisant PHP, lire dans un document XML (qui a des instructions SQL imbriquées), exécuter ces instructions, et remplacer essentiellement l'instruction sql par les résultats.Remplacer les instructions SQL en XML par les résultats de la requête

(Juste une note, en utilisant PostgreSQL)

Par exemple:

<customers> 
    <customer> 
     <info>* from customer for where customer = 1</info> 
      <details> 
      <po> 
       <info>* from po join where customer = "master" customer</info> 
      </po> 
      <order_history> 
       <info>* from order_history where customer = "master" customer</info> 
      </order_history> 
      </details> 
    </customer> 
    <customer> 
     <info>* from customer for where customer = 2</info> 
      <details> 
      <po> 
       <info>* from po join where customer = "master" customer</info> 
      </po> 
      <order_history> 
       <info>* from order_history where customer = "master" customer</info> 
      </order_history> 
      </details> 
    </customer> 
    ... 
</customers> 

Je suis confiant en lecture dans le document XML et l'interrogation de la base de données avec les instructions SQL, mais je ne suis pas à Sûre comment aller peupler les résultats dans la structure XML.

Une sorte de remplacement de texte? Ou reconstruire simultanément un document XML en double avec des résultats? Aucune suggestion? Merci ...

En outre, ces requêtes sont corrélées dans le sens que les sous-requêtes (ou des requêtes de niveau supérieur) dépendent des requêtes de niveau inférieur ...

Répondre

1

Cela peut ne pas être ce que vous cherchez, mais je suggère de ne pas inclure de SQL dans le XML si vous pouvez l'éviter. Si votre application se développe, vous pouvez vouloir utiliser autre chose pour stocker des données (memcache?) Et ensuite vous devrez écrire un traducteur SQL -> (quelque chose d'autre).

Donc, quelque chose comme:

<customers> 
    <customer id="1"> 
    <fetch /> 
    <details> 
     <po> 
     <fetch /> 
     </po> 
... 

Ensuite, dans votre PHP, vous pouvez analyser le XML avec les méthodes DOM. Lorsque vous exécutez une balise client, vous définissez "l'ID client actuel", supprimez la balise de récupération subordonnée, effectuez la requête souhaitée, ajoutez des balises contenant les résultats, puis passez à l'arborescence vers les balises suivantes. Lorsque vous cliquez sur l'étiquette d'extraction dans la balise po, vous pouvez récupérer les données de bon de commande du client actuel, en répétant le processus ci-dessus (supprimer, interroger, ajouter des balises).

La sortie contiendra l'identifiant client dans le même format que l'entrée, ce qui facilite la mise en corrélation de la sortie et de l'entrée.

0

Votre question: serait-il des performances acceptables -contre recréer une autre structure XML? Si oui, ma réponse: vous ne pouvez pas savoir jusqu'à ce que vous essayez.

Vous avez dit, vous avez déjà une fonction pour créer XML pour 1 requête. Maintenant, vous pouvez écrire une fonction en plus: Prenez (Copiez?) Le XML que vous avez lu à partir de SQL-Query-XML, et insérez, sorte de "embed" le XML donné par la fonction SQL_TO_QUERY() - (en remplaçant le question?).

Si vous avez besoin de plus de détails, donnez plus de détails: quelles sont les fonctions PHP que vous utilisez pour manipuler XML, SimpleXML? Quelle est la taille du fichier XML de base de données? Pourquoi exactement ne pouvez-vous pas faire une déclaration générale pour tous les clients?

Questions connexes