目前为止,通用的转换方式我还没有找到,只有根据已知的xml对象结构来使用for循环不断地赋值。
var
xml
=
······//获取xml对象
var
objList
=
[]
for(var
i
=
0i<xml.childNodes.lengthi++){
var
obj
=
{}
obj.attribute1
=
xml.getAttribute("attribute1")//获取节点属性
obj.attribute2
=
xml.getAttribute("attribute2")
obj.children
=
[]
for(var
x=0x<xml.childNodes[i].childNodes.lengthx++){
var
element
=
xml.childNodes[i].childNodes[x]
var
child
=
{}
child.attribute1
=
element.getAttribute("attribute1")
child.attribute2
=
element.getAttribute("attribute2")
obj.children.push(child)
}
objList.push(obj)
}
for循环可以继续嵌套下去,每一个新的json对象的属性都可以自定义,但是在getAttribute()方法中一定要填写自己所需要的存在的属性。
这样的方法看起来比较蠢,暂时先这样用吧,等到我想到了更好的方法之后在考虑替换。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
可以考虑用一下,js + xpath.参考如下:
var dom=this.LoadXmlString(xmlDomStr)//xmldom
dom.setProperty("SelectionLanguage", "XPath")
var nodes=dom.selectNodes(xpath)
//nodes为返回节点对象集.
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("王佳琳"))