XML DOM 遍历节点树

遍历 (Traverse) 意味着在节点树中进行循环或移动。

实例

下面的例子使用 XML 文件 books.xml

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.  
  3. <bookstore>
  4.  
  5. <book category="children">
  6. <title lang="en">Harry Potter</title>
  7. <author>J K. Rowling</author>
  8. <year>2005</year>
  9. <price>29.99</price>
  10. </book>
  11.  
  12. <book category="cooking">
  13. <title lang="en">Everyday Italian</title>
  14. <author>Giada De Laurentiis</author>
  15. <year>2005</year>
  16. <price>30.00</price>
  17. </book>
  18.  
  19. <book category="web">
  20. <title lang="en">Learning XML</title>
  21. <author>Erik T. Ray</author>
  22. <year>2003</year>
  23. <price>39.95</price>
  24. </book>
  25.  
  26. <book category="web">
  27. <title lang="en">XQuery Kick Start</title>
  28. <author>James McGovern</author>
  29. <author>Per Bothner</author>
  30. <author>Kurt Cagle</author>
  31. <author>James Linn</author>
  32. <author>Vaidyanathan Nagarajan</author>
  33. <year>2003</year>
  34. <price>49.99</price>
  35. </book>
  36.  
  37. </bookstore>

函数 loadXMLString(),位于外部 JavaScript 中,用于加载 XML 文件。

遍历一棵节点树

循环 <book> 元素的所有子节点。

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="/example/xdom/loadxmlstring.js"></script>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. text="<book>";
  8. text=text+"<title>Harry Potter</title>";
  9. text=text+"<author>J K. Rowling</author>";
  10. text=text+"<year>2005</year>";
  11. text=text+"</book>";
  12. xmlDoc=loadXMLString(text);
  13. // documentElement always represents the root node
  14. x=xmlDoc.documentElement.childNodes;
  15. for (i=0;i<x.length;i++)
  16. {
  17. document.write(x[i].nodeName);
  18. document.write(": ");
  19. document.write(x[i].childNodes[0].nodeValue);
  20. document.write("<br />");
  21. }
  22. </script>
  23. </body>
  24. </html>

遍历节点树

您经常需要循环 XML 文档,比如:当你需要提取每个元素的值时。

这个过程叫作“遍历节点树”。

下面的例子循环 <book> 的所有子节点,并显示它们的名称和值:

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="loadxmlstring.js"></script>
  4. </head>
  5. <body>
  6. <script type="text/javascript">
  7. text="<book>";
  8. text=text+"<title>Harry Potter</title>";
  9. text=text+"<author>J K. Rowling</author>";
  10. text=text+"<year>2005</year>";
  11. text=text+"</book>";
  12.  
  13. xmlDoc=loadXMLString(text);
  14.  
  15. // documentElement always represents the root node
  16. x=xmlDoc.documentElement.childNodes;
  17. for (i=0;i<x.length;i++)
  18. {
  19. document.write(x[i].nodeName);
  20. document.write(": ");
  21. document.write(x[i].childNodes[0].nodeValue);
  22. document.write("<br />");
  23. }
  24. </script>
  25. </body>
  26. </html>

输出:

  1. title: Harry Potter
  2. author: J K. Rowling
  3. year: 2005

例子解释:

  • loadXMLString() 把 XML 字符串载入 xmlDoc 中
  • 获取根元素的子节点
  • 输出每个子节点的名称,以及文本节点的节点值