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下只弹出一个空警告框……