js如何解析xml字符串

JavaScript014

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数据就可以了

//判断不同的浏览器

function InitMf()

{

var mf_change=false

try {

mf_change = new ActiveXObject("Msxml2.XMLHTTP")

} catch (e) {

try {

mf_change = new ActiveXObject("Microsoft.XMLHTTP")

} catch (E) {

mf_change = false

}

}

if (!mf_change &&typeof XMLHttpRequest!='undefined') {

mf_change = new XMLHttpRequest()

}

return mf_change

}

读取数据

var xmlHttp = InitMf()

var HTML = ""

//获得xml文件

xmlHttp.open("GET", xmlfile+"?"+Math.random(), true)

// 设置处理服务器的JS函数,函数又 xmlHttp.onreadystatechange来确定

xmlHttp.onreadystatechange=function() {

//alert(xmlHttp.status)

if (xmlHttp.readyState==4 &&xmlHttp.status==200) {

//ajax的XML传输的解析。获取解析的数据

var xml = xmlHttp.responseXML

var node = xml.getElementsByTagName("item")//获得总结点

for(var i = 0 i <node.length i++){

var str_t = ""

var str_d = ""

var menuHTML = ""

var elem = node[i]

//下面开始获得子节点数据,当然可以继续循环,获得更下面的节点

var title = elem.getElementsByTagName("title")[0].textContent != undefined ? elem.getElementsByTagName("title")[0].textContent : elem.getElementsByTagName("title")[0].text

这些只是部分代码,不过已经足够了