How do I get the entire XML string from a XMLDocument returned by jQuery (cross browser)?

72,469

Solution 1

I need the actual XML as a string

You want it as plain text instead of XML object? Change dataType from 'xml' to 'text'. See the $.ajax documentation for more options.

Solution 2

If you want both, get the response as XML Document and as string. You should be able to do

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

If you want it as string why do you specify dataType:xml wouldn't then dataType:text be more appropriate?

Solution 3

You can also easily convert an xml object to a string, in your java script:

var xmlString = (new XMLSerializer()).serializeToString(xml);

Solution 4

You can get the native XMLHttpRequest object used in the request. At the time i'm posting this answer, jQuery docs state a few ways to do so.

One of them is via the third argument of the success callback:

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

For a complete example: https://jsfiddle.net/44m09r2z/

Solution 5

If you only need a string representing the xml returned from jquery, just set your datatype to "text" rather than trying to parse the xml back into text. The following should just give you raw text back from your ajax call:

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

icecream

Data

Updated on March 02, 2020

Comments

  • icecream
    icecream about 4 years

    I have tried and failed to find out how to get the entire XML string from the XMLDocument returned by a GET. There are a lot of questions on SO on how to find or replace specific elements in the object, but I can't seem to find any answer to how to get the entire document as a string.

    The example I'm working with is from here. The "do something with xml"-part is where I'm at at the moment. I get the feeling that this should be really trivial, but I fail to find out how. Is there an "xml.data()" or similar that can be used for this purpose?

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

    The use case is that I want to feed the xml to flash plugin and for that I need the actual XML as a string.

  • icecream
    icecream over 14 years
    Thanks. I knew it was trivial :)
  • icecream
    icecream over 14 years
    If I designed an XML object, why would I not have an API to get the data?
  • Ben Cottrell
    Ben Cottrell over 14 years
    The XML object is for getting/manipulating data that's stored inside the XML. You want the XML itself, which is a subtly different thing :)
  • cal meacham
    cal meacham over 14 years
    Strange same answer as BalusC yet not a single upvote nor accepted??
  • icecream
    icecream over 14 years
    @Olly: What if I want both? Should I then get it as string so and then create an XMLDocument on the client? Changing "xml" to "text" solved my problem now, but I still think there should be a "getData()" function or similar on the XMLDocument. @jitter: I think BalusC answered before you did, but I'll upvote you.
  • cal meacham
    cal meacham over 14 years
    provided answer if you want both xmldocument and string
  • ZiggyTheHamster
    ZiggyTheHamster over 11 years
    jitter's answer is better because it supports IE as well.
  • Krzysztof Jabłoński
    Krzysztof Jabłoński over 10 years
    +1 It works despite undocumented in docs I've found. Thanks for ajax#options link.
  • Yster
    Yster over 9 years
    Doesn't seem to work for me: TypeError: Argument 1 of XMLSerializer.serializeToString does not implement interface Node.
  • Yster
    Yster over 9 years
    Doesn't seem to work for me: TypeError: Argument 1 of XMLSerializer.serializeToString does not implement interface Node.