2011-08-18 3 views
0

J'ai passé des jours à comprendre et à lire sur la façon de produire un fichier xml à partir d'une table dans ma base de données. Je l'ai bien fonctionné et produit un fichier XML valide pour moi d'analyser. Ce fichier contient plus de 13000 enregistrements et j'ai seulement besoin de tirer des enregistrements pour afficher à l'utilisateur où un certain champ xml (catégorie) contient des données. Cela peut-il être fait? La seule autre façon que je peux penser est de filtrer ces enregistrements à travers le script php qui tire les enregistrements et produisant le fichier xml. Toute aide est appréciée. Mon code est inférieur à celui que j'utilise pour créer le code xml et le code jquery côté client pour afficher le contenu xml. Je sais que mon script jquery montre seulement 2 des champs xml à cause des tests.Tirer des enregistrements xml avec un certain champ rempli?

Merci.

code PHP pour produire le fichier xml

$query = "SELECT name,test_code,cpt_code,components FROM tm_test"; 
$result = mysql_query($query); 


$doc = new DomDocument('1.0'); 

header('Content-Type: application/xml; charset=ISO-8859-1'); 

// create root node 
$root = $doc->createElement('tests'); 
$root = $doc->appendChild($root); 

while($array = mysql_fetch_array($result)) { 

// add node for each row 
$occ = $doc->createElement('test'); 
$occ = $root->appendChild($occ); 

$child = $doc->createElement('name'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['name']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('test_code'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['test_code']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('cpt_code'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['cpt_code']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('components'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['components']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('method'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['method']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('clinical_indication'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['clinical_indication']); 
$value = $child->appendChild($value); 

$child = $doc->createElement('category'); 
$child = $occ->appendChild($child); 
$value = $doc->createTextNode($array['category']); 
$value = $child->appendChild($value); 
} 

$doc->save('testlist.xml'); 

echo $doc->saveXML(); 
?> 

scripts jQuery pour afficher tous les enregistrements

$(document).ready(function(){ 

          $.ajax({ 
            type: "GET", 
            url: "testlist.xml", 
            dataType: "xml", 
            success: parseXml 
            }); 
          function parseXml(xml) { 
          $(xml).find('test').each(function(){ 
            $("#testList").append('<li><div data-role="collapsible" data-collapsed="true" data-theme="b"><h3>' + $(this).find("name").text() + '</h3>' + '<p>' + $(this).find("test_code").text() + '</p></div></li>'); 

                }); 
          } 
          }); 

Répondre

0

Il suffit de passer la catégorie souhaitée dans votre appel ajax à PHP. La catégorie sera disponible pour votre script PHP en tant que $_GET['category'].

Changer votre requête SQL pour filtrer par cette catégorie en utilisant une clause WHERE:

$query = "SELECT name,test_code,cpt_code,components FROM tm_test 
      WHERE category = ?"; 

et lier la valeur variable (pour éviter l'injection SQL).

+0

Merci. J'ai filtré les enregistrements via SQL et en tirant seulement ceux avec certaines catégories. Je les ai ensuite classés par catégorie. – Deon

Questions connexes