js如何解析xml字符串

JavaScript07

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')

xmlDoc.loadXml(xmlStr)

var pNode = xmlDoc.selectSignNode('people')

var result = ''

for(var node in pNode.selectNodes('*')){

result+=(result.length>0?',':'') + node.nodeName+'='+node.innerText

}

alert(reuslt)

或者用DOM操作:

<xml id='testXml' />

var result = ''

with(document.getElementById('testXml')){

innerHTML = xmlStr

for(var child in children){

result += ',' + child.tagName + '=' + child.innerText

}

if(result.length >0){

result = result.substring(1)

}

}

Xml代码 <?xml version="1.0" encoding="gbk"?> <root> <checkresult> <%=result%> </checkresult> <checkresult> <%=message%> </checkresult> </root> 其中返回两个内容,一个结果数,以及一个针对该结果数的消息。 AJAX这个就不用去说怎么样操作了,下面这个函数只将返回字符串组成XML包的形式: //装载字符串,将字符串组成XML的形式返回 Html代码 function loadXML(xmlString) ...{ var xmldoc try ...{ xmldoc = new ActiveXObject("Microsoft.XMLDOM") if(!xmldoc) xmldoc = new ActiveXObject("MSXML2.DOMDocument.3.0") } catch(e)...{} if(!xmldoc) ...{ return null } else ...{ xmldoc.async = "false" xmldoc.loadXML(xmlString) if(xmldoc.parseError.errorCode == 0 ) ...{ return xmldoc } else ...{ return null } } } 但其中需要注意一点,不能够直接利用返回得到的字节流,因为他们不属于字符串,这个时候需要将得到的字节流转换为字符串,才可以操作成功。我本人就遇到这个问题,直接操作就会出错,但我把这里传入的参数改为对应的XML字符串就可以,但我现在还不知道怎么样将字节流转换为字符串,因为总是要内网外网的切换做测试,挺麻烦的。 下面一个方面就是将XML中我们需要的数据,处理数组,这样我们就可以在其它的地方使用: //获得检测结果 Html代码 function getURLResult(URL) ...{ var url = URL var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0") xmlhttp.open("POST", url, false) xmlhttp.send() var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0") xmlDoc = loadXML(bytes2BSTR(xmlhttp.responseBody)) var NodeLists = xmlDoc.selectNodes("/root/checkresult") var result = new Array() for(var i=0i<NodeLists.lengthi++)...{ result[i] = NodeLists[i].text } return result } 在前台页面,就可以将需要的结果进行操作了。

刚学习javascript,写一个小游戏做练习,现在想要做一个配置文件,练习一下XML的操作……

进入正题:

如下xml文件:profile.xml

XML/HTML

<?xml version="1.0" ?>

<configuration>

    <row>Hello</row>

    <col>word!</col>

</configuration>

在google搜索结果中出现频率比较高的一段代码:

javascript文件:test.js

JavaScript

var doc = loadXmlFile("profile.xml")

alert(doc.text)

function loadXmlFile(xmlFile){

  var xmlDom = null

  if (window.ActiveXObject){

    xmlDom = new ActiveXObject("Microsoft.XMLDOM")

    //xmlDom.loadXML(xmlFile)//如果用的是XML字符串

    xmlDom.load(xmlFile)//如果用的是xml文件。

  }else if (document.implementation && document.implementation.createDocument){

    var xmlhttp = new window.XMLHttpRequest()

    xmlhttp.open("GET", xmlFile, false)

    xmlhttp.send(null)

    xmlDom = xmlhttp.responseXML

  }else{

    xmlDom = null

  }

  return xmlDom

}

这个方法在IE下能正常输出“hello word”,IE9、以及IE9的IE7、IE8的兼容模式都正常。

但是在firefox下输出的是“undefined”

而Chrome下则无输出,提示 xmlhttp.send(null)这行 Uncaught Error: NETWORK_ERR:XMLHttpRequest Exception 101

还有一种方法是用JQuery

JavaScript code?

$.get('profile.xml',function(xml){    

        alert($(xml).text())    

    })

在Chrome下只弹出一个空警告框……