我有一个像这样的困境。
我有一个代表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代码以
的形式返回 <
![CDATA [Whoooppeee]] >
我尝试过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遍历函数都会产生相同的错误。
我准备采用字符串操作函数,这些函数很难看! 因此,任何有助于我获得一些合理结果的帮助或提示都会非常感激。
此致 非常感激和赞赏溢出船员的集体智慧!
格斯
答案 0 :(得分:2)
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的对象。