js如何解析请求返回的XML字符串

js如何解析请求返回的XML字符串,第1张

var xmlStr = '<root><people><name>张三</name><address>北京</address></people></root>';

var result = null;

eval('result=['+$(xmlStr)find('people')map(function(){

return '{'+$('',this)map(function(){

return $(this)attr('tagName') + ':"' + $(this)text() + '"';

})get()join(',') + '}';

})get()join('],[')+']');

alert(result);

//result是一个数组,如果有多个people节点,则为:[{name:"张三",address="北京"},{name:"李四",address="上海"}]

不好意思偏题了,以下是你要的结果:

var result = $(xmlStr)find('people')children()map(function(){

return $(this)attr('tagName')+'='+$(this)text();

})get()join();

上面的都是jquery的写法:

javascript的话:

用COM *** 作:

object xmlDoc = new ActiveObject('msxml2');

xmlDocloadXml(xmlStr);

var pNode = xmlDocselectSignNode('people');

var result = '';

for(var node in pNodeselectNodes('')){

result+=(resultlength>0',':'') + nodenodeName+'='+nodeinnerText;

}

alert(reuslt);

或者用DOM *** 作:

<xml id='testXml' />

var result = '';

with(documentgetElementById('testXml')){

innerHTML = xmlStr;

for(var child in children){

result += ',' + childtagName + '=' + childinnerText;

}

if(resultlength > 0){

result = resultsubstring(1);

}

}

已知有一个XML文件(bookstorexml)如下:

<xml version="10" encoding="gb2312">

<bookstore>

<book genre="fantasy" ISBN="2-3631-4">

<title>Oberons Legacy</title>

<author>Corets, Eva</author>

<price>595</price>

</book>

</bookstore>

1、往<bookstore>节点中插入一个<book>节点:

XmlDocument xmlDoc=new XmlDocument();

xmlDocLoad("bookstorexml");

XmlNode root=xmlDocSelectSingleNode("bookstore");//查找<bookstore>

XmlElement xe1=xmlDocCreateElement("book");//创建一个<book>节点

xe1SetAttribute("genre","李赞红");//设置该节点genre属性

xe1SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

XmlElement xesub1=xmlDocCreateElement("title");

xesub1InnerText="CS从入门到精通";//设置文本节点

xe1AppendChild(xesub1);//添加到<book>节点中

XmlElement xesub2=xmlDocCreateElement("author");

xesub2InnerText="候捷";

xe1AppendChild(xesub2);

XmlElement xesub3=xmlDocCreateElement("price");

xesub3InnerText="583";

xe1AppendChild(xesub3);

rootAppendChild(xe1);//添加到<bookstore>节点中

xmlDocSave("bookstorexml");

//===============================================

结果为:

<xml version="10" encoding="gb2312">

<bookstore>

<book genre="fantasy" ISBN="2-3631-4">

<title>Oberons Legacy</title>

<author>Corets, Eva</author>

<price>595</price>

</book>

<book genre="李赞红" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>候捷</author>

<price>583</price>

</book>

</bookstore>

2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。

XmlNodeList nodeList=xmlDocSelectSingleNode("bookstore")ChildNodes;//获取bookstore节点的所有子节点

foreach(XmlNode xn in nodeList)//遍历所有子节点

{

XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型

if(xeGetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”

{

xeSetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

XmlNodeList nls=xeChildNodes;//继续获取xe子节点的所有子节点

foreach(XmlNode xn1 in nls)//遍历

{

XmlElement xe2=(XmlElement)xn1;//转换类型

if(xe2Name=="author")//如果找到

{

xe2InnerText="亚胜";//则修改

break;//找到退出来就可以了

}

}

break;

}

}

xmlDocSave("bookstorexml");//保存。

//==================================================

最后结果为:

<xml version="10" encoding="gb2312">

<bookstore>

<book genre="fantasy" ISBN="2-3631-4">

<title>Oberons Legacy</title>

<author>Corets, Eva</author>

<price>595</price>

</book>

<book genre="update李赞红" ISBN="2-3631-4">

<title>CS从入门到精通</title>

<author>亚胜</author>

<price>583</price>

</book>

</bookstore>

3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。

XmlNodeList xnl=xmlDocSelectSingleNode("bookstore")ChildNodes;

foreach(XmlNode xn in xnl)

{

XmlElement xe=(XmlElement)xn;

if(xeGetAttribute("genre")=="fantasy")

{

xeRemoveAttribute("genre");//删除genre属性

}

else if(xeGetAttribute("genre")=="update李赞红")

{

xeRemoveAll();//删除该节点的全部内容

}

}

xmlDocSave("bookstorexml");

//===========================================

最后结果为:

<xml version="10" encoding="gb2312">

<bookstore>

<book ISBN="2-3631-4">

<title>Oberons Legacy</title>

<author>Corets, Eva</author>

<price>595</price>

</book>

<book>

</book>

</bookstore>

4、显示所有数据。

XmlNode xn=xmlDocSelectSingleNode("bookstore");

XmlNodeList xnl=xnChildNodes;

foreach(XmlNode xnf in xnl)

{

XmlElement xe=(XmlElement)xnf;

ConsoleWriteLine(xeGetAttribute("genre"));//显示属性值

ConsoleWriteLine(xeGetAttribute("ISBN"));

XmlNodeList xnf1=xeChildNodes;

foreach(XmlNode xn2 in xnf1)

{

ConsoleWriteLine(xn2InnerText);//显示子节点点文本

}

}

我看后发现有如下问题

1、javascript是一种脚本语言,是有一定安全限制的,不知道你打算通过xmlDocsave("XmlData/aboutxml");把aboutxml文件保存到客户端还是服务器端,如果是服务器端那是不可能的,需要自己写activex控件

2、javascript只能 *** 作浏览器内存中的dom对象,另存为xml文件一般是没有意义的

3、如果把xml文件保存到客户端这么做也不好,一般的杀毒软件也许会报为病毒,如果保存到客户端,我以前的办法是用applet数字签名,然后再保存

可以修改,我对JS并不是非常熟悉,给你一段代码参考一下。<script>

var xmldom

function test()

{

xmldom = new ActiveXObject("Msxml2DOMDocument")

xmldomasync = false;

xmldom = documentallmxhXMLDocument

}

function test2()

{

var xmldom = new ActiveXObject("Msxml2DOMDocument")

xmldomasync = false;

xmldom = documentallmxhXMLDocument

node = xmldomselectSingleNode("//nodeB")

node2 = xmldomcreateElement("nodeB")

node2text=parseInt(nodetext)+1

xmldomdocumentElementreplaceChild(node2,node)

node = xmldomselectSingleNode("//nodeB")

alert(nodetext)

alert(xmldomxml)

}

function test3()

{

documentfxmldatavalue= documentallmxhXMLDocumentxml

alert(documentfxmldatavalue)

documentfsubmit()

}

</script>

<body>

<XML id=mxh>

<root>

<nodeA>nodeA</nodeA>

<nodeB>30</nodeB>

</root>

</XML>

<form name=f action="xxasp">

<input name=xmldata type=hidden>

<input onclick="test()" type="button" value=old>

<input onclick="test2()" type="button" value=请多点几次>

<input onclick="test3()" type="button" value=保存>

</form>

保存,调用 xmldomsave("xxxxml")

这个就麻烦了,是改文件里的xml文荣,还是改xml字串里的内容。

如果是改文件,就要先读文件,读文件的代码可以搜索到。

改xml里的字串,不知道你是要替换还是有什么规则啊。

读xml文件

<script language="Javascript">

var xmlDoc=new ActiveXObject("MicrosoftXMLDOM")

xmlDocasync="false"

xmlDocload("notexml")

</script>

以上就是关于js如何解析请求返回的XML字符串全部的内容,包括:js如何解析请求返回的XML字符串、js 修改节点名、JS给XML添加子节点并写入数据!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10068723.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存