Newsgroup: it.comp.lang.javascript
Titolo: filtrare item tramite attributo (google api)

hello!
Sto facendo un adattamento al parser di google api.
<markers>
<marker lat='46.166' lng='11.01' html='prova' off='no'  label='andalo'
icontype='citta'/>
</markers>
dovrei riuscire a filtrare gli item che hanno un determinato icontype
questa è la dichiarazione principale che filtra "TUTTI" gli item
<marker>
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
come posso filtrare solo gli item con attributo icontype='citta'

Ho provato i questo modo :
var markers = xmlDoc.selectNodes("//marker[@icontype='citta']")
mi ritorna un errore:
Errore: markers.selectNodes is not a function
Ma in locale funziona benissimo.
Ghena ha scritto:


 Ma in locale funziona benissimo.
a parte che è un metodo Microsoft-only (ma immagino tu lo sappia e ti vada
bene) l'unica che mi viene in mente sul perché in locale funziona e in
remoto no è che sul server dove stai pubblicando hanno una versione delle
DOM API diversa da quella sul tuo pc locale.
Qua c'è qualcosa per renderlo cross-browser (mai testato):
 
http://www.siteexperts.com/forums/viewConverse.asp?d_id=18610
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 DOM API diversa da quella sul tuo pc locale.
se lo stai eseguendo server-side ovviamente ... se sei client-side non
saprei cosa dire (vedi comunque il link che ti ho passato, ma sicuramente
non risolverà il problema "locale sì remoto no")
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

Ciao cristiano...
a me sembrava che fosse cross browser....
mi sembra che sia xpath puro...
L'errore infatti me lo da con FF.
var markers = xmlDoc.selectNodes("//marker[@icontype='citta']")
Cristiano Larghi ha scritto:


 L'errore infatti me lo da con FF.
infatti, io non trovo alcun riferimento su selectNodes per i browser
Gecko...
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

devo usare document.element ?
Cristiano Larghi ha scritto:


 devo usare document.element ?
hai letto la ben scritta pagina che ti ho postato?
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

Ho letto si grazie,
ma mi sorge solo un dubbio:
nel mio caso dovrei scrivere :
document.createNSResolver( markers =
xmlDoc.selectNodes("//marker[@icontype='citta']") )
?????
non mi sembra molto corretto.
Cristiano Larghi ha scritto:


 ma mi sorge solo un dubbio:
a me tanti ... ero in dubbio su quel selectNodes, ho visto che Gecko
infatti non lo supporta e ho trovato quella pagina che ti ho postato e che
mi sembrava ben spiegata.
Di più io non so dirti, perché ho usato xpath solo in c# server-side.
sorry
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 var markers = xmlDoc.selectNodes("//marker[@icontype='citta']")
Generalmente č cosě:
var path = "//marker[@icontype='citta']" ;
var res = xmlDoc.evaluate(path, xmlDoc, null, XPathResult.ANY_TYPE,
null).iterateNext();
o come questa che avevo trovato e riadattato
 
/**
 * @param {XMLDocument} xmlDoc
 * @param {string} xpath
 * @return An array containing all xml founded nodes
 * @type array
 */
faser.moz.evaluateXPath = function(xmlDoc, xpath) {
	var xpe = new XPathEvaluator();
	var ns;
	if(xmlDoc.ownerDocument === null) {
		ns =  xmlDoc.documentElement;
	}else{
		ns = xmlDoc.ownerDocument.documentElement;
	}
	var nsResolver = xpe.createNSResolver(ns);
	var result = xpe.evaluate(xpath, xmlDoc, nsResolver, 0, null);
	var nodes = [];
	var res;
	while (res = result.iterateNext()){
		nodes.push(res);
	}
	return nodes;
};
oppure usa google ajaxslt e sei totalmente cross-browser se sopporti i
circa 60 kb
http://sourceforge.net/projects/goog-ajaxslt/
--
FABIO SERRA
Per rispondere in e-mail sostituire "invalid" con "faser"
*Questo testo deve essere valutato secondo il senso della RFC-3*
------------------

 mi sembra che sia xpath puro...
Non è l'xpath il problema, quanto il mezzo con cui lo usi. Ovvero il metodo
"selectNodes" che non è standard.
Se cerchi negli archivi di questo NG dovresti trovare qualche mio vecchio
post di qualche anno fa, circa l'implementazione dello stesso meccanismo su
Gecko.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)