您的位置:首页 > Web前端 > JavaScript

javascript 将xml字符串转换成json对象

2015-12-21 19:03 791 查看
xml字符串转换,首先要把字符串转换成dom对象,再从dom对象里获取你要的参数,可用getElementsByTagName之类的方法。以下是2个xml字符串转成dom对象的方法

方法1:

loadXML: function(xmlString) {
var xmlDoc = null;
try //Internet Explorer
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlString);
} catch (e) {
try //Firefox, Mozilla, Opera, etc.
{
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString, "text/xml");
return xmlDoc;
} catch (e) {
return;
}
}
return xmlDoc;
}


方法二

loadXML: function(xmlString) {
var xmlDoc = null;
//判断浏览器的类型
//支持IE浏览器
if (!window.DOMParser && window.ActiveXObject) { //window.DOMParser 判断是否是非ie浏览器
var xmlDomVersions = ['MSXML.2.DOMDocument.6.0', 'MSXML.2.DOMDocument.3.0', 'Microsoft.XMLDOM'];
for (var i = 0; i < xmlDomVersions.length; i++) {
try {
xmlDoc = new ActiveXObject(xmlDomVersions[i]);
xmlDoc.async = false;
xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串
break;
} catch (e) {}
}
}
//支持Mozilla浏览器
else if (window.DOMParser && document.implementation && document.implementation.createDocument) {
try {
/* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
* 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法
* parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
* 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。
*/
domParser = new DOMParser();
xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
} catch (e) {}
} else {
return null;
}
return xmlDoc;
}


解析数据:

xml2Json: function(xmlString) {
var xmlDoc = this.loadXML(xmlString),
root = xmlDoc.firstChild,
obj = {};
if (root && root.children && root.children.length > 0) {
//以下解析参数步骤等可根据自己xml做修改
for (var i = 0; i < root.children.length; i++) {
var child = root.children[i],
attributes = child.attributes,
tagName = child.tagName;
var value = child.textContent;
if (attributes[0] && attributes[0].nodeName == 'T') {
if (attributes[0].nodeValue == 'N') { //number
value = parseFloat(value);
} else if (attributes[0].nodeValue == 'T') { //time
value = new Date(value);
}
}
obj[tagName] = value;
}
}
return obj;
}


测试数据:

"<?xml version="1.0" encoding="UTF-8"?>
<ROOT T="O" N="5" AM_VER="2">
<startTime T="T">2015-12-04 03:20:00</startTime>
<startIndex T="N">1</startIndex>
<endIndex T="N">1000</endIndex>
<type T="N">1</type>
<endTime T="T">2015-12-06 03:20:00</endTime>
</ROOT> "
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: