web-dev-qa-db-ja.com

JavaScriptで文字列をXMLドキュメントに変換

AjaxのjQueryサンプルページでこの例を見ました。

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

次のような文字列を取得するにはどうすればよいですか。

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

それをXML DOMオブジェクトに変換しますか?クロスブラウザ?

[〜#〜] update [〜#〜]:karim79の回答へのコメントを参照してください。

21
BuddyJoe

それをjQueryオブジェクトでラップします。次に、jQueryの通常のDOM操作メソッドを使用します。

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

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

それをプレーンな文字列に変換したい場合(たとえば、変更した後)、次のように実行できます。

//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);
}

編集: $。ajaxマニュアルによると (processDataオプション):

デフォルトでは、データオプションにオブジェクトとして渡されたデータ(技術的には文字列以外のもの)が処理され、クエリ文字列に変換され、デフォルトのコンテンツタイプ「application/x-www-form-urlencoded」に適合します。 。 DOMDocumentsまたはその他の未処理データを送信する場合は、このオプションをfalseに設定します。

したがって、jQueryオブジェクトをサーバーに渡す場合は、jQueryオブジェクトをtrueに設定するか、完全に省略する必要があります(これはtrueデフォルトで)。お役に立てば幸いです。

35
karim79

Findを呼び出すだけです-トップレベルの要素の場合は、代わりにフィルターを使用する必要があります。

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

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

JQueryがなくても変換を実行できます。これはMozillaの 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");
3
jabe

この単純なコードを使用して、xmlタグをテキストに変換できます

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

堅実なコード。すべてのブラウザで完全に動作します。

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