2009-08-17 12 views
20

Sah dieses Beispiel auf der jQuery Beispiele Seite für Ajax:Convert String in XML-Dokument in JavaScript

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

Wie kann ich eine Zeichenfolge wie:

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

Und das DOM in eine XML konvertieren Objekt? Cross-Browser?

UPDATE: Bitte beachten Sie Kommentare zu Karim79's Antwort.

Antwort

35

Wickeln Sie es in ein jQuery-Objekt. Verwenden Sie dann jQuerys normale DOM-Manipulationsmethoden.

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

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

Wenn Sie es zurück zu einem einfachen Zeichenfolge konvertieren möchten (nachdem es zum Beispiel zu ändern) Sie können es tun, wie 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: Die $.ajax manual says (auf der verarbeite Option):

standardmäßig übergebenen Daten an die Daten Option als Objekt (technisch, etwas anderes als ein String) wird verarbeitet werden und in eine Abfrage umgewandelt Zeichenfolge, passend zum Standard Inhalt-Typ "Anwendung/x-www-Form-urlencoded". Wenn Sie DOMDocuments oder andere nicht verarbeitete Daten senden möchten, setzen Sie diese Option auf false.

Also, wenn Sie ein jQuery-Objekt an den Server zu übergeben, werden Sie das zu wahr setzen müssen, oder weglassen es insgesamt (es wird auf wahr Standard). Hoffnung, die geholfen hat.

+0

Vielleicht etwas falsch in dem $ .ajax Anruf Ich erhalte. Ich habe es so gewickelt, wie du gesagt hast. Dann meldet sich mein Login auf dem Server: [Objekt Objekt] Was soll ich jetzt versuchen? – BuddyJoe

+0

Mache ich etwas falsch mit .ajax()? Ich habe es einfach als String weitergegeben und es hat funktioniert. seltsam. Hat das etwas mit der Option processData zu tun? oder eine andere Option, die ich nicht anmache? – BuddyJoe

+0

+1 Danke für diese Beispiele – BuddyJoe

10

Nur ein Kopf auf Anruf finden - wenn es ein Top-Level-Element ist, müssen Sie stattdessen Filter verwenden.

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

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

@pubb - Sie haben Recht, ich überspringe dieses Detail, wie ich immer über die Elemente der zweiten Ebene Schleife. +1 für das Aufzeigen. – karim79

0

können Sie diesen einfachen Code verwenden für Ihre XML-Tags konvertieren

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

rock solid Code in Text. funktioniert perfekt in allen Browsern.

var xmlFields = $("<root><reports name='report 1'><item 
       field='ord_num' desc='Order Number'/></reports></root>"); 
alert(xmlFields[0].outerHTML); 
+0

Dies funktioniert nur, weil jQuery HTML-Knoten für diese erstellt hat. Für etwas, wo jQuery sie wie XML-Knoten behandelt (wie '$ ($. ParseXML (" ")), wird dies nicht funktionieren. – ZiggyTheHamster

0

Sie können die Konvertierung ohne jQuery durchführen. Dies wird von Mozillas genommen DOMParser Documentation:

// Create a DOMParser 
var parser = new DOMParser(); 

// Use it to turn your xmlString into an XMLDocument 
var xmlDoc = parser.parseFromString(xmlString, "application/xml");