jQuery XMLDocuments和字符串

时间:2011-11-08 05:43:51

标签: javascript jquery

我有一个像这样的困境。

我有一个代表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);

这会在firebug中产生安全性异常

使用直接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代码以

的形式返回

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

我尝试过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")

产生一个firebug错误&#34; xml.filter不是一个函数&#34; 任何jQuery DOM遍历函数都会产生相同的错误。

我准备采用字符串操作函数,这些函数很难看! 因此,任何有助于我获得一些合理结果的帮助或提示都会非常感激。

此致 非常感激和赞赏溢出船员的集体智慧!

格斯

2 个答案:

答案 0 :(得分:2)

尝试createCDATASection()

newText = xml.createCDATASection("Whooppeee");

答案 1 :(得分: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");

你在做生意。

要将修改后的XML输出回字符串,您可以使用XMLSerializer,如下所示:

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

请注意,在这种情况下,我们将原始解析的xml对象传递给序列化程序,而不是jQuery-fied的对象。