jQuery XML no funciona bien en IE7 ni IE8

El framework  jQuery nos ha facilitado a los desarrolladores el acceso a los datos XML que provienen de AJAX; pero también permite leer XML contenido en la propia página con javascript. Eso sí, funciona mucho mejor en Chrome y Firefox que en Internet explorer.

Si en un input tenemos el siguiente texto:

<granja>
<animal id="0001">vaca</animal>
<animal id="0002">oveja</animal>
<animal id="0003">gallina</animal>
</granja>

Con jQuery podemos recorrerlo directamente con este código:

$(inputXML.value).find('animal').each(
function(){
$(this).text (); //devuelve el texto
$(this).attr ('id'); // devuelve un atributo
});

Como veréis, es mucho más intuitivo y rápido que utilizar directamente  los métodos de la clase XMLHttpRequest.

Eso sí, en Chrome y Firefox porque la función find no nos funcionará en IE7 e IE8 (esto es lo mismo que decir en todos los Windows XP que hay todavía activos, y que son muchos).

Esto es debido a que IE detectará que estamos en un documento HTML y no XML y lo podemos solventar así:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(inputXML.value);
$("granja", xmlDoc).find("animal").each( function() {
$(this).text (); //devuelve el texto
$(this).attr ('id'); // devuelve un atributo
});

En mi caso, se trata de un aplicativo que siempre se accederá con IE7 (se ejecuta en un entorno controlado) pero si deseamos publicar algo así, deberíamos utilizar el objeto XMLDOM correcto para cada navegador – lo sé, qué rollo.

if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(inputXML.value,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(inputXML.value);
}

Ultima hora:

Si las claves de XML vienen del serializado de un objeto, IE8 nos va a exigir que las marcas XML no contengan información sobre paquete: <es.josedetorre.MiClase>dato</es.josedetorre.MiClase> es inválido.

El error que da es “sólo se admite un elemento de nivel superior en un documento XML” aunque el fichero esté bien formado.

La solución es serializar sin información de paquete: <MiClase>datos</MiClase>

Eligiendo una cámara: Canon EOS Reflex

A los 16 años usé por primera vez una Reflex. Y estas navidades mi mujer me nos va a regalar a toda la familia una Cámara Reflex Digital, también denominadas DSLR. Eso sí, ha exigido encargarse ella de la compra y ha elegido todo lo contrario a lo que yo, que se supone soy el experto, hubiera comprado. Estaba bien asesorada y ha acertado de pleno – para mi gusto. Y es que esto de la fotografía ha cambiado mucho en 20 años.

Los que me conocen saben que, cuando hago una compra, me encanta conocer todas las alternativas al detalle y comparar antes de comprar. Informarme. Por eso Mamá Noël ha pedido esta vez encargarse de la compra personalmente: sabe que me hace mucha ilusión y quiere que sea un regalo, y que yo me limite a flipar de lo bien que lo ha elegido.

Leer más de este artículo

Mamá, soy programador

Teclado - Control! by FaraMarz

Teclado - una foto de FaraMarz

Mi madre y mucha gente que conozco no tiene claro a qué me dedico, así que reproduzco aquí la conversación que tuve con ella durante mi segundo sueño de anoche. Recordad que la conversación ha sido onírica y que puede que haya detalles que no recuerde bien.

Mamá – ¿Pero tú no eres informático?

José Manuel – Sí claro, pero la informática no es  sólo una profesión sino muchas profesiones. Decir que te dedicas a la Informática es como decir que te dedicas a la construcción* donde hay fontaneros, alicatadores, escayolistas …

*nota: mucha de mi familia se dedica a la construcción, por eso creo que en el sueño lo usaba de ejemplo

M – ¿Y entonces qué es la informática?

La informática se encarga de recoger, transformar, almacenar y distribuir información a través de máquinas. Hay especialistas en esas tareas y en otras más.

¿Y a qué parte te dedicas tú?

Yo trabajo como desarrollador. También nos llaman programadores. Le digo al ordenador qué tiene que hacer en cada momento.

¿Y cómo lo haces?

Se lo escribo. El ordenador lo lee y sabe qué tiene que hacer.

¡Ah! ¿Y se escribe en Inglés o cómo?

Se escribe con lenguajes de programación. Son lenguajes sólo para programar. Usan palabras en inglés y simbolitos. Existen muchos lenguajes y muy variados y en mi caso no basta con saber uno solo.

Pero en la tele dicen que cualquiera puede aprender a programar… ¿Para eso te hemos pagado una carrera?

Los programas pueden ser muy grandes y hay que saber dividir las tareas. Para eso hace falta experiencia o tener buena formación. Además hay diferentes tipos de lenguajes, y con frecuencia hay que aprender lenguajes nuevos.

Cualquiera puede programar, como cualquiera puede pintar una casa. Pero lo mismo que necesitas un pintor para hacer un estucado, necesitas un programador para hacer trabajos profesionales.

Pero tú sabes mucho de ordenadores, todos te pedimos ayuda con los virus, con la impresora, con las averías …

Ya te conté que hay muchas profesiones dentro de la Informática. Me he especializado en programación, pero sé hacer algunos mantenimientos. Como ya te dije, cualquiera puede aprender a hacer tareas sencillas, lo mismo que a pintar una pared o poner un enchufe.

Los que ponéis interés, aprendéis  a hacerlo por vosotros mismos.

Es importante para un desarrollador conocer cómo es el trabajo de los profesionales con los que colabora. En mi caso, es interesante saber cómo se mantienen a punto los ordenadores, como se transmiten los datos, cómo funciona la seguridad y otras cosas…

Entonces empecé a usar lenguaje técnico y mi madre se transformó en un entrevistador para un puesto en una nueva empresa, pero eso es otro sueño que os contaré otro día.