js遍历获取xml中指定节点的值

亮术网 2020-05-28 本网原创

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("王佳琳");