2009-08-16 8 views
1

Je ne sais pas si c'est possible, je travaille sur un site web que je n'ai accès à aucun type de MYSQL ou de base de données. Ni tout PHP. Peu importe le clientXML multiple avec liaison de données?

Peu importe que j'ai 3 fichiers XML avec différentes parties de données, j'ai placé une "clé" qui correspond à l'autre. Je crois qu'une simple instruction IF fera l'appariement.

Cependant, quel est le meilleur moyen d'appeler 3 fichiers XML et d'en extraire des données, et de les combiner en une boucle.

Voici le code qui fonctionne à tirer un d'entre eux:

$.ajax({ 
    type: "GET", 
    url: "xml/classes.xml", 
    dataType: "XML", 
    beforeSend: function(){ 
    $('#classContainer').append("<p>Loading</p>");}, 
    success: function(xml) { 
    $(xml).find('monday').each(function(){ 

      var $classdate = $(this); 
      var title = $classdate.find("class").attr('title'); 

      var level = $classdate.find("class").attr('classLevel'); 
       var time = $classdate.find("time").text(); 
       var duration = $classdate.find("time").attr("duration"); 
       var hourofday = $classdate.find("time").attr("hourofday"); 
       var location = $classdate.find("location").text(); 



      var Monhtml = '<div class="classBlock">'; 

      Monhtml += '<p class="title">' + title + '<span class="loadingPic" alt="Loading" /> ' + ' </p>'; 
       Monhtml += '<p class="infoBar"> <strong>Time:</strong>' + time + '<span class="hour">'+ hourofday +'</span><br>'+'<strong>Duration:</strong>' + duration +' Minutes <br>' + '<strong>Location:</strong>' + location + '<br><strong>Instructor:</strong> </p>'; 
       Monhtml += '<p class="description"> <span class="level">' + level + '</span></p>' ; 

      Monhtml += '</div>'; 


      $('#classContainer').append($(Monhtml)); 
     }); 
     } 
    }); 

Je voudrais créer une variable à placer dans « monHTML » j'aurais un ensemble de variables de 3 documents XML tout fusionné dans la variable "monHTML"

Toutes les idées "?

Répondre

1

Puisque vous ne pouvez pas fusionner les fichiers sur le serveur, vous devrez effectuer 3 demandes de ajax indépendants. La difficulté consiste à synchroniser les 3 demandes. Ils peuvent être effectués de manière synchrone mais cela certainement nuire à la performance et pourrait causer des délais d'attente une meilleure façon est d'être d'envoyer les 3 demandes de manière asynchrone et invoquer un rappel une fois que les 3 demandes terminer:..

var addreses = ['xml/file1.xml', 'xml/file2.xml', 'xml/file3.xml']; 

var ajaxQueue = { 
    files   : [], 
    checkFinished : function() { 
     if (this.files.length == addresses.length) { 
      // You can work with the 3 xml files here... 
      // this.files will be an array of elements that contain 
      // url and xml parameters. Check the url parameter to identify the 
      // corresponding xml. 
      // Remark: as the order in which the requests finish can vary, the array 
      // will not be sorted. 
     } 
    }; 
}; 

$(addreses).each(function(index, address) { 
    $.ajax({ 
     url  : address, 
     dataType : 'xml', 
     success : function(data) { 
      ajaxQueue.files.push({ url: address, xml: data }); 
      ajaxQueue.checkFinished(); 
     } 
    }); 
}); 
+0

Cela semble être la meilleure option jusqu'à présent, l'autre problème est de savoir comment connecter certaines données de 1 à l'autre. Etes-vous capable de le connecter en choisissant avec quoi comparer? – matthewb

0

Votre client pourrait être en mesure d'offrir une base de données XML native Plusieurs sont gratuits et de bonne qualité - eXist-org. est un bon point de départ. Vous pouvez ensuite utiliser XQuery pour résoudre ce problème plus facilement.

Questions connexes