2011-03-30 21 views
5

Estoy intentando acceder a contenido XML unido al extremo de un documento HTML (cosas generado) con jQuery usando este método:jQuery análisis XML IE7/IE8

$("SELECTION_STATE").find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 

esto funciona bien en Firefox y Chrome, pero no en IE, no alertará nada.

Este es el xml que estoy tratando de atravesar

<SELECTION_STATE> 

    <SELECTION type="CARTESIAN_PRODUCT"> 
     <CHARACTERISTICS> 
     <CHARACTERISTIC name="Z_MDST"> 
      <SELECTIONS> 
      <SELECTION type="SINGLE_MEMBER"> 
       <MEMBER name="00002213" type="MEMBER" text="2213"/> 
      </SELECTION> 
      </SELECTIONS> 
     </CHARACTERISTIC> 

¿hay alguna manera de lograr que con jQuery 1.5?

Gracias de antemano

Respuesta

6

Porque está en un documento HTML. IE no reconocerá XML.

console.log($("SELECTION_STATE").get()); 

vuelve objeto HTMLUnknownElement en IE

Para utilizar el código XML tendrá que ejecutar a través del analizador XML IE. Algo como.

var x = new ActiveXObject("Microsoft.XMLDOM"); 
x.loadXML(yourXML) 

Usted, obviamente, sólo quiere hacer esto si ($ browser.msie.)

pregunta al margen: ¿Está cargando el XML con AJAX?

Actualizado: Ejemplo completo

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
var myXML = document.body.innerHTML; // or wherever you are storing the XML in the DOM 
xmlDoc.loadXML(myXML) 

if (xmlDoc.parseError.errorCode != 0) { 
    var myErr = xmlDoc.parseError; 
    console.log("You have error " + myErr.reason); 
} else { 
    console.log(xmlDoc.xml); 
} 

$("SELECTION_STATE", xmlDoc).find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 
+0

gracias. no, este es un caso especial en el que necesito acceder al contenido HTML generado en el mismo documento (producto comercial de código cerrado) con algunas líneas de javascript. no AJAX involucrado :-( Voy a intentar su sugerencia –

+0

pregunta relacionada - ¿cómo me las arreglaría para cargar el documento actual? –

+0

Es importante notar que el XML debe validar, o IE no lo analizará (no es tan indulgente como HTML ...) Eres el primer ejemplo perdido algunas etiquetas de cierre – Daniel

6

Dado que ya está utilizando jQuery utilizar la función parseXML (http://api.jquery.com/jQuery.parseXML/ añadido en la versión 1,5)

var xmlDoc = $.parseXML(data); 

$(xmlDoc).find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 
+0

esto no parece funcionar, estoy usando jquery 1.7 y prueba ie8 en win7 – somid3

+0

Es Es importante recordar aquí que con IE, no puede usar '.html()' para obtener los contenidos de un nodo. Tienes que usar '.text()' –