2011-11-08 11 views
1

私はこのようなジレンマを持っています。jQueryのXMLドキュメントと文字列

私はXMLを表す文字列を持っています。そのXMLを操作してノードを追加して更新したいのですが、xmlを文字列として戻したいと思います。

私はJavaScriptとjQueryを使って働いていると私はいくつかの方法

jQueryを使って

var x_raw = "<?xml version='1.0'?><Q id ='23'><SQ id='201'><GP id='0'></GP></SQ></Q>" 
var j_xml = $(x_raw) 
.... Code for XML manipulation goes here .... 
var x_string = (new XMLSerializer()).serializeToString(j_xml); 

これはストレートJavaScriptを使用して放火犯

でセキュリティ例外を生成します見てきました

var x_raw = "<?xml version='1.0'?><Q id ='23'><SQ id='201'><GP id='0'></GP></SQ></Q>" 
var xml = $.parseXML(x_raw); 

newNode = xml.createElement("VALUE") 
newText = xml.createTextNode("<![CDATA[Whooppeee]]>"); 

var insert = xml.getElementsByTagName('GP')[0].appendChild(newNode) 
insert = insert.appendChild(newText) 

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

これは動作しますが、CDATAコードはbaになります

&lt;![CDATA [Whoooppeee]] &gt;

としてCK私はjavascriptの脱出トリック

newText = xml.createTextNode("\<![CDATA[Whooppeee]]\>") 

は、XMLドキュメントにjQueryのトラバーサル機能付き

いずれも動作しません試してみました...

var x_raw = "<?xml version='1.0'?><Q id ='23'><SQ id='201'><GP id='0'></GP></SQ></Q>" 
var xml = $.parseXML(x_raw); 
var collection = xml.filter("SQ") 

prod "xml.filterは関数ではありません" すべてのjQuery DOMトラバーサル関数は同じエラーを生成します。

私は醜い文字列操作機能に頼る準備ができています! 私にいくつかの論理的な結果を得るためのヒントやヒントは非常に高く評価されます。

よろしくお願いいたします。 オーバーフロークルーの総体的な知恵に感謝と感謝の意を表します!

のGus

答えて

2

てみcreateCDATASection()

newText = xml.createCDATASection("Whooppeee"); 
+0

なぜ私はちょうどそこのどこかに私の質問に簡単な答えが出ていたことを知ったのですか?私はGooglesphereで答えを見つけようと努力していますが、おそらく私はXML DOMの正しい参照を見つけることができません Dr Molleに感謝します –

+0

w3cは常に参照を検索するのに適しています:) http:// www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#method-createCDATASection –

0

あなたが議論されている最後のオプションは良いスタートです:

var x_raw = "<?xml version='1.0'?><Q id ='23'><SQ id='201'><GP id='0'></GP></SQ></Q>" 
var xml = $.parseXML(x_raw); 
var collection = xml.filter("SQ") 

あなたは$.parseXML(...)とその結果のオブジェクトを、あなたのコードを解析することはできませんした後jQueryがまだトラバースしていないしかし、$(xml)を追加すると、すべての標準jQuery関数が機能することがわかります。上記のコードを修正するだけで、

var x_raw = "<?xml version='1.0'?><Q id ='23'><SQ id='201'><GP id='0'></GP></SQ></Q>"; 
var xml = $.parseXML(x_raw); 
var xmlDoc = $(xml); 
var collection = xmlDoc.filter("SQ"); 

となります。出力するには

次のようにXMLSerializerを使用することができますバックの文字列に変更されたXML:このケースでは、我々はというし、jQueryの-fiedが1シリアライザに、元はxmlオブジェクトを解析され渡すこと

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

注意を。

+0

まずはお返事いただきありがとうございました 私はあなたの提案を試みましたが、 XMLSerilazier.serializeToString(collection)関数呼び出しで文字列にシリアル化されず、firebugセキュリティエラー –

+0

が生成されます。変更されたXML文書。私は概念のフィデルフィリップスを持っていますhttp://jsfiddle.net/martineno/zdKPp/ Firefoxの私のためのセキュリティの警告なしで動作します。試してみてください。 – martineno

+0

ああ、私はXML文書を解析し、jQueryオブジェクトを解析しないという最後のことを忘れてしまった。私はこれをテストし、ここでかなりの時間をかけて結果を知ってもらいます。 –