¿Cómo puedo obtener toda la cadena XML a partir de un XMLDocument devuelto por jQuery (cross browser)?

He intentado y no ha podido encontrar la manera de obtener la totalidad de la cadena XML de la XMLDocument devuelto por un GET. Hay un montón de preguntas sobre la MANERA en cómo buscar o reemplazar elementos específicos en el objeto, pero me parece que no puede encontrar la respuesta a cómo obtener el documento completo como una cadena.

El ejemplo, estoy trabajando es de aquí. El «hacer algo con xml»-parte es donde estoy en el momento. Tengo la sensación de que esto debe ser muy trivial, pero no puedo averiguar cómo. Hay un «xml.de datos()» o similares, que pueden ser utilizados para este propósito?

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        //do something with xml
    }
});

El caso de uso es la que quiero para alimentar el xml para el plugin de flash y para que necesito el real XML como una cadena.

InformationsquelleAutor icecream | 2009-11-04

6 Kommentare

  1. 44

    Necesito el XML real como una cadena

    Desea como texto sin formato en lugar de objeto XML? Cambio dataType de 'xml' a 'text'. Ver el $.ajax documentación para obtener más opciones.

    • Gracias. Yo sabía que era trivial 🙂
    • +1 funciona a pesar de indocumentados en docs he encontrado. Gracias por ajax#opciones de enlace.
  2. 54

    Si quieres tanto, obtener la respuesta como Documento XML y como cadena. Usted debe ser capaz de hacer

    success: function(data){
      //data.xml check for IE
      var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
      alert(xmlstr);
    }

    Si quieres que sea como una cadena de texto ¿por qué especificar dataType:xml no, a continuación, dataType:text ser más apropiado?

    • Si he diseñado un objeto XML, ¿por qué no voy a tener una API para obtener los datos?
    • El objeto XML es para conseguir/la manipulación de datos que se almacena en el interior del XML. Desea que el XML en sí, que es una sutil otra cosa 🙂
    • Extraño misma respuesta como BalusC sin embargo, ni una sola upvote ni aceptada??
    • Lo que si me quiere tanto? Debo, a continuación, poner la cadena de modo y, a continuación, crear un XMLDocument en el cliente? El cambio de «xml» a «texto» resuelto mi problema ahora, pero aún así yo creo que debe ser un «getData()» función o similar en la XMLDocument. @jitter: creo que BalusC contestadas antes de que usted lo hizo, pero voy a upvote usted.
    • proporciona respuesta si usted quiere que xmldocument y cadena
    • Parece que no funciona para mí: TypeError: Argumento 1 de XMLSerializer.serializeToString no implementa la interfaz de Nodo.

  3. 23

    También puede convertir fácilmente un objeto xml a una cadena, en su secuencia de comandos de java:

    var xmlString = (new XMLSerializer()).serializeToString(xml);
    • la fluctuación de la respuesta es mejor porque es compatible con IE.
    • Parece que no funciona para mí: TypeError: Argumento 1 de XMLSerializer.serializeToString no implementa la interfaz de Nodo.
  4. 1

    Si usted sólo necesita una cadena que representa el xml devuelto de jquery, que acaba de establecer su tipo de datos a «texto» en lugar de tratar de analizar el xml en el texto. El siguiente debe dar solamente el texto sin formato de la llamada ajax:

    $.ajax({
        url: 'document.xml',
        type: 'GET',
        dataType: 'text',
        timeout: 1000,
        error: function(){
            alert('Error loading XML document');
        },
        success: function(xml){
            //do something with xml
        }
    });
  5. 1

    Aunque esta pregunta ya ha sido contestada, lo que quería señalar una salvedad: Cuando la recuperación de XML usando jQuery con Internet Explorer, DEBE especificar el tipo de contenido a ser «text/xml» (o «application/xml») o de lo contrario no será capaz de analizar los datos como si se tratara de XML con jQuery.

    Usted puede estar pensando que esto es una cosa obvia, pero me atrapó cuando el uso de Mozilla/Chrome/Opera en lugar de IE. Cuando la recuperación de una «cadena» de XML con un contenido de tipo de «texto», todos los navegadores excepto IE le permitirá analizar los datos (utilizando los selectores de jQuery) como si se tratara de XML. Es decir no va a tirar un error y simplemente no devolverá ningún resultado para jQuery, la selección de instrucción.

    Así que, en tu ejemplo, mientras que sólo necesitan la cadena-versión serializada del XML y no esperar jQuery para hacer cualquier tipo de selección en el DOM de XML, se puede establecer el tipo de contenido a «texto». Pero si usted TAMBIÉN necesario analizar el XML con jQuery, usted tendrá que escribir una rutina personalizada que serializa el XML en una cadena para usted, o bien recuperar una versión del XML con content-type «xml».

    La esperanza de que ayude a alguien 🙂

  6. 1

    Usted puede conseguir el nativo objeto XMLHttpRequest utilizado en la solicitud.
    En el momento en que estoy publicando esta respuesta, jQuery docs estado un par de maneras de hacerlo.

    Uno de ellos es mediante el tercer argumento de que el éxito de devolución de llamada:

    success: function(xml, status, xhr){
        console.log(arguments);
        console.log(xhr.responseXML, xhr.responseText);
        console.log('Finished!');
    }

    Para ver un ejemplo completo:
    https://jsfiddle.net/44m09r2z/

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea