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)

}

}

1、用 childNodes 属性,按顺序取

实现过程:首先创建一个 xml 对象,然后载入 xml 文件,再根据待取节点父节点在 xml 文件中的序号和本身的序号,确定待取节点的位置,最后返回待取节点的值。

//pId 待取节点父节点序号

//cId 待取节点序号

function getXmlNodeValue(pId, cId) {

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")

    xmlDoc.async = false

xmlDoc.load("employeeInfo.xml")

var nodes = xmlDoc.documentElement.childNodes[pId].childNodes[cId]return nodes.childNodes[0].text

}

调用方法:alert(getXmlNodeValue(1, 2))

2、用 for 循环来取

实现过程:首先创建一个 ie 支持的 xml 对象,如果发生异常,是创建一个 FireFox 支持的空 xml 对象并返回空;然后载入 xml 文件,如要发生异常也返回空;最后,通过 for 循环遍历查找与传入的节点值相同的节点,找到后返回属于该节点的属性值。

//nodeValue 待取节点的所属节点值

function getXmlNodeValueFor(nodeValue){    

    var xmlDoc 

  try { 

    //创建一个 ie 支持的 XML 文档对象 

    xmlDoc = new ActiveXObject("Microsoft.XMLDOM")

  }catch(e){

      try{

      //创建FireFox空的XML文档对象

      xmlDoc=document.implementation.createDocument("","",null)

}catch(e){

  alert(e.message)

  return ""

}

}

xmlDoc.async = false

try { 

    xmlDoc.load("employeeInfo.xml")

}catch(e){

    alert(e.message)

    return ""

}

var xd=xmlDoc.documentElement.childNodes

if(xd==null) 

    return ""

 var tempValue

for(var i=0i<xd.lengthi++){

    if(xd[i].childNodes[0].childNodes[0].nodeValue==nodeValue)        tempValue=xd[i].childNodes[2].childNodes[0].nodeValue

}

return tempValue

}

调用方法:alert(getXmlNodeValueFor("王佳琳"))

JS里面使用join把数组转换为字符串传递给PHP,PHP再使用explode把获取的字符串转换为数组,例如:

调用的JS:

<script type="text/javascript">

var oCC=new TClientCheck()

var str=oCC.join('|')

location.href='but.php?str='+str

</script>

处理的PHP:

<?php

$str=$_GET["str"]

$oCC=explode('|', $str)

print_r($oCC)

?>