JavaScript解析XML格式字符串

我们在做项目的时候,有时会以XML格式来传递数据,比如,后端的读取数据库某条记录,以XML的形式返回给前端,类似如下这样一段XML格式的代码:

<ReqStr>
	<User>
		<UserID>10</UserID>
		<UserCode>XX010</UserCode>
		<UserName>张三</UserName>
		<UserSex></UserSex>
		<DepartmentID>1</DepartmentID>
	</User>
	<User>
		<UserID>11</UserID>
		<UserCode>XX011</UserCode>
		<UserName>李四</UserName>
		<UserSex></UserSex>
		<DepartmentID>2</DepartmentID>
	</User>
	<User>
		<UserID>12</UserID>
		<UserCode>XX012</UserCode>
		<UserName>王五</UserName>
		<UserSex></UserSex>
		<DepartmentID>3</DepartmentID>
	</User>
</ReqStr>

例:前端获取到上面的字符串后,如果要读取XML里的员工号(UserCode),员工姓名(UserName)等信息该如何才能实现呢?

第一步:

把XML格式的字符串转换成XML对象,如下:

function loadXML(flag, xml) {
    var xmlDoc;
    if (window.ActiveXObject) {
        var aVersions = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "Microsoft.XmlDom"];
        for (var i = 0; i < aVersions.length; i++) {
            try {
                xmlDoc = new ActiveXObject(aVersions[i]);
                break;
            } catch (oError) {
            }
        }
        if (xmlDoc != null) {
            xmlDoc.async = false;
            if (flag == true) {
                xmlDoc.load(xml);
            } else {
                xmlDoc.loadXML(xml);
            }
            return xmlDoc.documentElement;
        }
    } else {
        if (document.implementation && document.implementation.createDocument) {
            xmlDoc = document.implementation.createDocument("", "", null);
            if (xmlDoc != null) {
                if (flag == true) {
                    xmlDoc.async = false;
                    xmlDoc.load(xml);
                } else {
                    var oParser = new DOMParser();
                    xmlDoc = oParser.parseFromString(xml, "text/xml");
                }
                return xmlDoc.documentElement;
            }
        }
    }
    return null;
}

调用上面的方法

var xml = loadXML(false, 'XML格式的字符串');//第二个参数传XML格式的字符串
第二步:

读取XML属性的JS方法,如下:

function getValue(xml,tagName,i){
    if (window.ActiveXObject) {
        return xml.selectNodes(tagName)[i].Text;
    } else {
        return xml.ownerDocument.getElementsByTagName(tagName)[i].firstChild.nodeValue;
    }
}

调用上面的方法

//参数说明
//xml:XML对象
//"UserCode":元素名
//i:索引
var UserCode = getValue(xml, "UserCode", i);
第三步:

获取XML元素的长度,如下:

function getLen(xml,tagName,i){
    if (window.ActiveXObject) {
        return xml.selectNodes(tagName).length;
    } else {
        return xml.ownerDocument.getElementsByTagName(tagName).length;
    }
}

调用上面的方法

//参数说明
//xml:XML对象
//"UserCode":元素名
var UserCode = getLen(xml, "UserCode");
最后看段完整的代码:
var Str = "<ReqStr>"+
	"<User>"+
	"<UserID>10</UserID>"+
	"<UserCode>XX010</UserCode>"+
	"<UserName>张三</UserName>"+
	"<UserSex>女</UserSex>"+
	"<DepartmentID>1</DepartmentID>"+
	"</User>"+
	"<User>"+
	"<UserID>11</UserID>"+
	"<UserCode>XX011</UserCode>"+
	"<UserName>李四</UserName>"+
	"<UserSex>男</UserSex>"+
	"<DepartmentID>2</DepartmentID>"+
	"</User>"+
	"<User>"+
	"<UserID>12</UserID>"+
	"<UserCode>XX012</UserCode>"+
	"<UserName>王五</UserName>"+
	"<UserSex>男</UserSex>"+
	"<DepartmentID>3</DepartmentID>"+
	"</User>"+
	"</ReqStr>";
var xml = loadXML(false, Str);
// 遍历节点名称并输出
for (var i = 0; i < getLen(xml, 'User'); i++) {
	console.log(getValue(xml, 'UserID', i));
	console.log(getValue(xml, 'UserCode', i));
	console.log(getValue(xml, 'UserName', i));
	console.log(getValue(xml, 'UserSex', i));
	console.log(getValue(xml, 'DepartmentID', i));
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用JavaScript内置的XML解析器DOMParser来解析XML文件或XML格式字符串。下面是一个示例代码: ```javascript // 定义一个XML格式字符串 var xmlString = '<root><person><name>张三</name><age>18</age></person></root>'; // 创建一个DOMParser对象 var parser = new DOMParser(); // 解析XML字符串 var xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // 获取XML文档中的元素 var name = xmlDoc.getElementsByTagName('name')[0].childNodes[0].nodeValue; var age = xmlDoc.getElementsByTagName('age')[0].childNodes[0].nodeValue; // 打印结果 console.log('name:', name); console.log('age:', age); ``` 在上面的代码中,我们首先定义了一个XML格式字符串,然后创建了一个DOMParser对象,使用parseFromString方法来解析XML字符串,最后从解析后的文档中获取元素并打印结果。 如果要解析XML文件,可以使用XMLHttpRequest对象来获取XML文件内容,然后再使用DOMParser解析。具体代码请参考下面的示例: ```javascript // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 发送GET请求获取XML文件内容 xhr.open('GET', 'example.xml', true); xhr.send(); // 监听XML文件加载完成事件 xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 获取XML文件内容 var xmlString = xhr.responseText; // 创建DOMParser对象 var parser = new DOMParser(); // 解析XML字符串 var xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // 获取XML文档中的元素 var name = xmlDoc.getElementsByTagName('name')[0].childNodes[0].nodeValue; var age = xmlDoc.getElementsByTagName('age')[0].childNodes[0].nodeValue; // 打印结果 console.log('name:', name); console.log('age:', age); } }; ``` 在上面的代码中,我们创建了一个XMLHttpRequest对象,使用GET请求获取XML文件内容,然后使用DOMParser解析XML字符串,最后从解析后的文档中获取元素并打印结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新鑫S

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值