Thursday, April 5, 2012

Convert String to XML Document in JavaScript


Saw this example on the jQuery examples page for Ajax:




var xmlDocument = [create xml document];
$.ajax({
url: "page.php",
processData: false,
data: xmlDocument,
success: someFunction
});



How do I take a string like:




var t = '<foo><bar>something</bar></foo>';



And convert that to a XML DOM object? cross-browser?



UPDATE : Please see comments to karim79's answer.


Source: Tips4all

3 comments:

  1. Wrap it in a jQuery object. Then use jQuery's normal DOM manipulation methods on it.

    var t = $('<foo><bar>something</bar></foo>');

    //loop over 'bar' nodes
    t.find('bar').each(function () {
    alert($(this).text());
    });


    If you want to convert it back to a plain string (after modifying it for example) you can do it like so:

    //then convert it back to a string
    //for IE
    if (window.ActiveXObject) {
    var str = t.xml;
    alert(str);
    }
    // code for Mozilla, Firefox, Opera, etc.
    else {
    var str = (new XMLSerializer()).serializeToString(t);
    alert(str);
    }


    EDIT: The $.ajax manual says (on the processData option):


    By default, data passed in to the data
    option as an object (technically,
    anything other than a string) will be
    processed and transformed into a query
    string, fitting to the default
    content-type
    "application/x-www-form-urlencoded".
    If you want to send DOMDocuments, or
    other non-processed data, set this
    option to false.


    So if you're passing a jQuery object to the server, you'll need to set that to true, or omit it altogether (it is set to true by default). Hope that helped.

    ReplyDelete
  2. Just a heads up on calling find - if it's a top level element you need to use filter instead.

    var t = $('<foo><bar>something</bar></foo>');

    //loop over 'foo' nodes
    t.filter('foo').each(function () {
    alert($(this).find('bar').text());
    });

    ReplyDelete
  3. you can use this simple code for convert your xml tags to text

    var temp_var = $("<p/>").append($(your_xml_data)).htML()

    ReplyDelete