Hrátky s jQuery: Parsování XML
Pokud máte někde na serveru XML a chcete z něj vytáhnout data a prezentovat je ve vaší webové stránce, pak vězte, že s pomocí jQuery je to hračka. Hlavním omezením parsování XML pomocí jQuery, resp. javascriptu je velikost XML. U souborů vetších než 500 kB může už být s parsováním problém. Pokud budete XML, které chcete parsovat načítat AJAXem, musí být XML na stejné doméně jako váš parsovací skript.
V ukázce místo XML budeme parsovat XHTML (úvodní stránku Wikipedie). Funčkní skript si můžete vyzkoušet na http://jsbin.com/vsm1/4/. Abych si mohl XML k parsování dotáhnout AJAXem ($.get()), zkopíroval jsem si úvodní stránku Wikipedie na http://jsbin.com/idesi/2/.
Do inputu v ukázce stačí zadat libovolný jQuery selektor. V dokumentu budou nalezeny všechny uzly odpovídající selektoru a zobrazeny všechny jejich XML atributy.
<body> Enter jQuery selector: <input type="text" id="inp" value="a[href]" /> <input type="button" id="run" value="Find" /> <br/> <div id="outInfo"></div> </body>
$("#run").click(function () {
var nodeSelector = $("#inp").val();
alert("Looking for nodes matching: "+nodeSelector);
$.get("http://jsbin.com/idesi/2/", function(data){
aElems = [];
$(data).find(nodeSelector).each(function() {
elemAttrs = $(this)[0].attributes;
aAttrs = [];
for (var i in elemAttrs) {
if(elemAttrs[i].specified && ! /^jQuery/.test(elemAttrs[i].name)) {
aAttrs.push("<li><strong>"+elemAttrs[i].name+"</strong>: "+elemAttrs[i].value+"</li>");
}
}
aElems.push("<ul>"+aAttrs.join("")+"</ul>");
});
$("#outInfo").append(aElems.join(""));
});
});
Kód není příliš komplikovaný, zastavím se jen u některých částí:
- pomocí
$(this)[0].attributesse dostaneme k mapě (asociativnímu poli) názvů a hodnot atributů jednolivého nodu (bližší vysvětlení: $(this)[0] a .attributes) - v přikladu iterujeme ve dvou cyklech
- vnější pomocí each() hledá XML uzly odpovídající zadanému selektoru
- vnitřní prochází atributy nalezeného XML uzlu
- podmínka
if(elemAttrs[i].specified && ! /^jQuery/.test(elemAttrs[i].name))zajistí ignorování všech pseudoatributů, které jsou navázány na DOM uzel (liší se v různých prohlížečích), ale nejsou ve skutečnosti ve zdrojovém XML (vyzkoušejte bez této podmínky) - výpis atributů vyhovujícíh uzlů ke pomocí odrážkového seznamu; pro skládání HTML jsou v kódu v jednotlivých iteracích atributy ukládány do poleaAttrs[], které je nakonec spojeno do řetezce; tento postup je efektivnější než modifikace DOMu (např. pomocí
append()) v každé iteraci a možná i klasické skládání řetězce pomocí +
- pole aElems je použito ve vnějším cyklu pro uchování kousků HTML pro jednotlivé uzly
Článek vložen 28. února 2010 a označen štítky jquery,webdev,xml. Komentáře můžete sledovat také přes RSS 2.0 kanál..