2010-03-14 11 views
0

Je suis usig tablesorter jQuery pour analyser ce fichier xmlAvec jQuery et je besoin d'aide pour obtenir des titres de ligne de table différents attributs d'un fichier xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<CATALOG> 
    <CD> 
    <TITLE>Title 01</TITLE> 
    <ARTIST>Artist 01</ARTIST> 
    <COUNTRY>Country 01</COUNTRY> 
    <PRICE>10.00</PRICE> 
    <YEAR>2010</YEAR> 
    <INFO>Tooltip Info 01</INFO> 
    </CD> 
    <CD> 
    <TITLE>Title 02</TITLE> 
    <ARTIST>Artist 02</ARTIST> 
    <COUNTRY>Country 02</COUNTRY> 
    <PRICE>9.00</PRICE> 
    <YEAR>2009</YEAR> 
    <INFO>Tooltip Info 02</INFO> 
    </CD> 
    <CD> 
    <TITLE>Title 03</TITLE> 
    <ARTIST>Artist 03</ARTIST> 
    <COUNTRY>Country 03/COUNTRY> 
    <PRICE>8.00</PRICE> 
    <YEAR>2008</YEAR> 
    <INFO>Tooltip Info 03</INFO> 
    </CD> 
</CATALOG> 

et avec ce code

<script type="text/javascript"> 
$(document).ready(function(){ 
    $.ajax({ 
    type: "GET", 
    url: "file.xml", 
    dataType: "xml", 
    success: function(xml){     
     $(xml).find("CD").each(function(){            
      $("#tablebody").append('<tr><td>' 
      + $(this).find("TITLE").text() 
      + '</td><td>'+ $(this).find("ARTIST").text() 
      + '</td><td>'+ $(this).find("COUNTRY").text() 
      + '</td><td>'+ $(this).find("PRICE").text() 
      + '</td><td>'+ $(this).find("YEAR").text() 
      + '</td></tr>');       
      }); 
     } 
    }); 
}); 
</script> 

I » Je suis nouveau sur javascript et j'ai tenté sans succès pendant quelques heures d'obtenir le texte des balises INFO/INFO dans le fichier xml à afficher en tant qu'attributs de titre pour chaque ligne du tableau. La raison de cela est que j'ai besoin d'avoir des info-bulles contextuelles individuelles sur la souris au-dessus de chaque ligne du tableau. Merci d'avance pour toute aide ou suggestion!

Répondre

0
$("#tablebody").append("<tr title='" + $(this).find("INFO").text() + "'><td>" 
      + $(this).find("TITLE").text() 
      + '</td><td>'+ $(this).find("ARTIST").text() 
      + '</td><td>'+ $(this).find("COUNTRY").text() 
      + '</td><td>'+ $(this).find("PRICE").text() 
      + '</td><td>'+ $(this).find("YEAR").text() 
      + '</td></tr>');       
      }); 
1

Je le fais un peu différemment pour éliminer un code répétitif:

var cells = ["TITLE", "ARTIST", "COUNTRY", "PRICE", "YEAR"]; 

... 

success: function(xml) { 
    $(xml).find("CD").each(function() { 
    var title = $(this).children("INFO").text(); 
    var row = $("<tr>").attr("title", title).appendTo("#tablebody"); 
    for (var i=0; i<cells.length; i++) { 
     var text = $(this).children(cells[i]).text(); 
     $("<td>").text(text).appendTo(row); 
    } 
    } 

cells est juste un tableau des éléments de l'enfant que vous souhaitez créer des cellules de table à partir. Créer un balisage comme vous le faites peut devenir lent. La méthode ci-dessus est beaucoup plus rapide. L'attribut title sur la ligne est ce qui produit la pointe de l'outil.

+0

Est-ce que ne pas utiliser cette méthode avec de nombreux (en créant par exemple ajouter ses une grande table) diminuent considérablement les performances? (ref: http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly) – Mottie

0

Pour de meilleures performances (si la sortie est très grande), utilisez cette fonction:

success: function(xml){ 
    var content = ''; 
    $(xml).find("CD").each(function(){ 
    content += '<tr title="' + $(this).find("INFO").text() + '"><td>' + 
    $(this).find("TITLE").text() + '</td><td>' + 
    $(this).find("ARTIST").text() + '</td><td>' + 
    $(this).find("COUNTRY").text() + '</td><td>' + 
    $(this).find("PRICE").text() + '</td><td>' + 
    $(this).find("YEAR").text() + '</td></tr>'; 
    }); 
    $("#tablebody").append(content); 
} 

De this article, la meilleure performance serait de ne pas utiliser les tableaux de fonction .each et utilisation et autres, mais je n N'utilisez pas cette méthode car il est un peu plus difficile à lire et à comprendre surtout pour quelqu'un de nouveau à javascript. Bitdercript pour obtenir tous les TITRES (ou valeurs d'étiquette d'un type de point).

0

# Script XMLTags.txt 
var str document, xml, tagtype, tagvalue, searchRE 
set $searchRE = "^<"+$tagtype+"&</"+$tagtype+"^" 
cat $document > $xml 
while ({ sen -r -c $searchRE $xml } > 0) 
do 
    stex -r -c $searchRE $xml > $tagvalue 
    stex "^>^]" $tagvalue > null 
    stex "]^<^" $tagvalue 
done 

Appelez le script comme celui-ci à partir du script appelant.

script XMLTags.txt document("http://www.xxx.yyy/file.xml") tagtype("TITLE") 

Obtient tous les titres.

script XMLTags.txt document("http://www.xxx.yyy/file.xml") tagtype("ARTIST") 

obtiendrez tous les artistes.

etc.