一个实用的 Javascript XML to JSON Object 对象的转换 (JQuery)
一个用来将xml文件转换成对象的插件
xml文件如下
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<content>
<plugins>TreeView</plugins>
<plugins>ListGrid</plugins>
<plugins>ListBox</plugins>
</content>
<pool>1</pool>
</root>
生成的对象为:
调用
var xml = $.loadXML("PluginConf.xml");
var obj = $(xml).toObject().get(0);
alert(obj.pool);
以下是 源码下载
/*
*
* 转换xml为对象形式
* @return {Object}
* @param {XMLHttpRequest} elXML
*/
$.fn.toObject
=
function
(){
if
(
this
==
null
)
return
null
;
var
retObj
=
new
Object;
buildObjectNode(retObj,
/*
jQuery
*/
this
.get(
0
));
return
$(retObj);
function
buildObjectNode(cycleOBJ,
/*
Element
*/
elNode){
/*
NamedNodeMap
*/
var
nodeAttr
=
elNode.attributes;
if
(nodeAttr
!=
null
){
if
(nodeAttr.length
&&
cycleOBJ
==
null
) cycleOBJ
=
new
Object;
for
(
var
i
=
0
;i
<
nodeAttr.length;i
++
){
cycleOBJ[nodeAttr[i].name]
=
nodeAttr[i].value;
}
}
var
nodeText
=
"
text
"
;
if
(elNode.text
==
null
) nodeText
=
"
textContent
"
;
/*
NodeList
*/
var
nodeChilds
=
elNode.childNodes;
if
(nodeChilds
!=
null
){
if
(nodeChilds.length
&&
cycleOBJ
==
null
) cycleOBJ
=
new
Object;
for
(
var
i
=
0
;i
<
nodeChilds.length;i
++
){
if
(nodeChilds[i].tagName
!=
null
){
if
(nodeChilds[i].childNodes[
0
]
!=
null
&&
nodeChilds[i].childNodes.length
<=
1
&&
(nodeChilds[i].childNodes[
0
].nodeType
==
3
||
nodeChilds[i].childNodes[
0
].nodeType
==
4
)){
if
(cycleOBJ[nodeChilds[i].tagName]
==
null
){
cycleOBJ[nodeChilds[i].tagName]
=
nodeChilds[i][nodeText];
}
else
{
if
(
typeof
(cycleOBJ[nodeChilds[i].tagName])
==
"
object
"
&&
cycleOBJ[nodeChilds[i].tagName].length){
cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length]
=
nodeChilds[i][nodeText];
}
else
{
cycleOBJ[nodeChilds[i].tagName]
=
[cycleOBJ[nodeChilds[i].tagName]];
cycleOBJ[nodeChilds[i].tagName][
1
]
=
nodeChilds[i][nodeText];
}
}
}
else
{
if
(nodeChilds[i].childNodes.length){
if
(cycleOBJ[nodeChilds[i].tagName]
==
null
){
cycleOBJ[nodeChilds[i].tagName]
=
new
Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName],nodeChilds[i]);
}
else
{
if
(cycleOBJ[nodeChilds[i].tagName].length){
cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length]
=
new
Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length
-
1
],nodeChilds[i]);
}
else
{
cycleOBJ[nodeChilds[i].tagName]
=
[cycleOBJ[nodeChilds[i].tagName]];
cycleOBJ[nodeChilds[i].tagName][
1
]
=
new
Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName][
1
],nodeChilds[i]);
}
}
}
else
{
cycleOBJ[nodeChilds[i].tagName]
=
nodeChilds[i][nodeText];
}
}
}
}
}
}
}
/*
*
* @return {Element}
* @param {String} _url
*/
$.loadXML
=
function
(_url){
var
ret;
$.ajax({
type:
"
get
"
,
url:_url,
async:
false
,
dataType:
"
xml
"
,
success:
function
(xml){
ret
=
xml;
}
});
return
ret.documentElement;
}