XML DOM - NodeList 对象


XML DOM - NodeList 对象

XML DOM(Document Object Model)是一种处理XML文档的编程接口。在XML DOM中,NodeList 是一种用来表示节点列表的对象。NodeList 对象中的节点按照其在文档中的顺序排列,并且每个节点都有一个唯一的索引值。

创建 NodeList 对象

要创建 NodeList 对象,需要使用具体的 XML DOM 解析器提供的 API。例如,使用 JavaScript 中的 document.getElementsByTagName() 方法可以返回一个 DOM 节点列表,该列表就是 NodeList 对象的一个实例。

访问 NodeList 中的节点

NodeList 对象中的每个节点都根据其在文档中的位置分配索引值。可以使用 NodeList 对象的 item() 方法和 length 属性来访问列表中的节点。

<bookstore>
  <book category="cooking">
    <title>Italian Recipes</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title>The Cat in the Hat</title>
    <author>Dr. Seuss</author>
    <year>1957</year>
    <price>10.99</price>
  </book>
  <book category="web">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>
var books = document.getElementsByTagName("book");
for (var i = 0; i < books.length; i++) {
  var title = books[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
  console.log(title);
}

注:在上述代码中,我们首先使用 getElementsByTagName() 方法来获取所有 <book> 元素,然后通过遍历 NodeList,使用 getElementsByTagName() 方法获取每个 <book> 元素下的 <title> 元素,最后访问 title 元素的文本节点值。

NodeList 对象的属性和方法

以下是 NodeList 对象提供的一些常用属性和方法:

length 属性

length 属性是一个只读属性,表示 NodeList 中节点的个数。

item() 方法

item() 方法以索引值作为参数,返回 NodeList 中对应索引值的节点。索引值从 0 开始,即第一个节点的索引为 0。

forEach() 方法

forEach() 方法是一个 ECMAScript 5 中的方法,可以方便地对 NodeList 进行遍历操作。要使用 forEach() 方法,需要先将 NodeList 对象转换成数组:

var books = document.getElementsByTagName("book");
Array.prototype.forEach.call(books, function(book) {
  var title = book.getElementsByTagName("title")[0].childNodes[0].nodeValue;
  console.log(title);
});

其他方法

除了上述三种方法,NodeList 还提供了一些其他方法,例如:

  • entries():返回一个迭代器对象,可以依次迭代 NodeList 中所有的键值对。
  • keys():返回一个迭代器对象,可以依次迭代 NodeList 中所有的键名。
  • values():返回一个迭代器对象,可以依次迭代 NodeList 中所有的键值。

总结

NodeList 对象是 XML DOM 中一个常用的对象,可以用来表示节点列表。通过使用 item() 方法和 length 属性,可以方便地访问 NodeList 中的节点。同时, Nodelist 也提供许多实用的迭代器方法用来对 NodeList 进行遍历操作。