Torne o processamento XML do Firefox compatível com o método de processamento de nós do IE. Os códigos específicos estão listados abaixo.
O código específico é o seguinte.
<!DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<CABEÇA>
< TITLE > Tornar o processamento xml do Firefox compatível com o método selectSingleNode selectNodes do IE </ TITLE >
< META NAME ="Autor" CONTENT ="emu" >
< META NAME ="KeyWords" CONTENT ="firefox IE selectSingleNode selectNodes" >
< META NAME ="Descrição" CONTENT ="Habilitar o Firefox para suportar o método selectSingleNode selectNodes" >
< LINGUAGEM DO SCRIPT ="javascript" >
<!--
var isIE = !! document.all;
função parseXML(st){
if (éIE){
var resultado = novo ActiveXObject("microsoft.XMLDOM");
resultado.loadXML(st);
} outro {
var analisador = new DOMParser();
var resultado = parser.parseFromString(st, "text/xml");
}
resultado de retorno;
}
if ( ! éIE){
varex;
XMLDocument.prototype.__proto__.__defineGetter__("xml",função(){
tentar {
retornar novo XMLSerializer().serializeToString(this);
} pegar (ex){
var d = document.createElement("div");
d.appendChild(este .cloneNode(verdadeiro));
retornar d.innerHTML;
}
});
Element.prototype.__proto__.__defineGetter__("xml",função(){
tentar {
retornar novo XMLSerializer().serializeToString(this);
} pegar (ex){
var d = document.createElement("div");
d.appendChild(este .cloneNode(verdadeiro));
retornar d.innerHTML;
}
});
XMLDocument.prototype.__proto__.__defineGetter__("texto",função(){
retorne este .firstChild.textContent
});
Element.prototype.__proto__.__defineGetter__("texto",função(){
retorne este .textContent
});
XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = função (XPath){
var x = este.selectNodes(xpath)
if ( ! x x.length < 1 ) retornar nulo ;
retornar x[0];
}
XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = função (xpath){
var xpe = novo XPathEvaluator();
var nsResolver = xpe.createNSResolver(este .ownerDocument == nulo?
este .documentElement : este .ownerDocument.documentElement);
var resultado = xpe.evaluate(xpath, this, nsResolver, 0, null);
var encontrado = [];
var res;
enquanto (res = resultado.iterateNext())
encontrado.push(res);
retorno encontrado;
}
}
var x = parseXML( " <pessoas> <nome da pessoa= " eric " middle-initial= " H " sobrenome= " jung " > <endereço rua= " 321 sul st " cidade= "denver " estado= " co " país= " EUA " /> <endereço rua= " 123 main st " cidade= " arlington " estado= " ma " país= " usa " /> </person> <person first-name= " jed " last-name= " brown " > <address street= " 321 north st " city= " atlanta " state= " ga " country= " usa " /> <address street= " 123 west st " city= " seattle " state= " wa " country= " usa " /> <address street= " 321 South Avenue " city= " denver " state= " co " country= " usa " /> </person></people> " );
alert( " Pesquisar todos Sobrenome da pessoa (sobrenome) " )
var resultados = x.selectNodes( " //pessoa/@sobrenome ");
for ( var i = 0 ; i < resultados.comprimento;i ++ )
alert( " Pessoa # " + i + " tem o sobrenome " + resultados[i].nodeValue);
alert("Procurar pela segunda pessoa");
// IE usa 0 como base de subscrito, não 1
se (!documento.todos)
resultados = x.selectSingleNode( " /pessoas/pessoa[2] " );
outro
resultados = x.selectSingleNode( " /pessoas/pessoa[1] " );
alert(results.xml)
alert( "Pegue a pessoa cujo endereço está na Donver Street");
resultados = x.selectNodes( " //pessoa[endereço/@cidade='denver'] ");
for ( var i = 0 ; i < resultados.comprimento;i ++ )alert(resultados[i].xml)
if ( ! document.all){
// Obtém todos os endereços com sul nos nomes das ruas
resultados = x.selectNodes( " //endereço[contains(@street, 'south')] ");
alerta(resultados[ 0 .xml);
} outro {
alert("O IE não suporta o método de consulta //address[contains(@street, 'south')]" )
}
// -->
</ SCRIPT >
</HEAD>
<CORPO>
</BODY>
</ HTML >
Exemplo citado em http://kb.mozillazine.org/XPath . Como você pode ver no exemplo, o suporte do IE para XPath ainda é limitado.