
js遍历获取xml中指定节点的值
xml应用越来越广泛,用js遍历、取 xml 文件中指定节点的值等,是十分常规的操作。一般常用的获取方法有2种,一种是用 childNodes 属性按顺序取;另一种是用 for (或 foreach)循环来取。为了更直观,文章先列出一个待取指定节点的 xml 文件,然后再用2种方法来获取。
例如,待取值的xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<root>
<employee>
<name>李青青</name>
<sex>女</sex>
<birthday>1982-10-25</birthday>
</employee>
<employee>
<name>王佳琳</name>
<sex>女</sex>
<birthday>1985-11-18</birthday>
</employee>
<employee>
<name>秦凌云</name>
<sex>男</sex>
<birthday>1983-12-20</birthday>
</employee>
</root>
如果要取姓名为“王佳琳”的员工生日,该怎么取呢?
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;
}
调用方法: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 = 0; i < xd.length; i++) {
if (xd[i].childNodes[0].childNodes[0].nodeValue == nodeValue)
tempValue = xd[i].childNodes[2].childNodes[0].nodeValue;
}
return tempValue;
}
调用方法:getXmlNodeValueFor("王佳琳");