【问题标题】:JavaScript and XML Dom - Nested LoopJavaScript 和 XML Dom - 嵌套循环
【发布时间】:2025-12-28 23:20:13
【问题描述】:

所以我是 XML DOM 和 JavaScript 的初学者,但我遇到了一个问题。我正在使用该脚本在现有站点的表中显示我的 XML 数据。问题在于在我的 JavaScript 代码中嵌套循环。

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>
<book_list>
  <author>
    <first_name>Mary</first_name>
    <last_name>Abbott Hess</last_name>
      <books>
        <title>The Healthy Gourmet Cookbook</title>
      </books>
  </author>
  <author>
    <first_name>Beverly</first_name>
    <last_name>Bare Bueher</last_name>
      <books>
        <title>Cary Grant: A Bio-Bibliography</title>
        <title>Japanese Films</title>
      </books>
  </author>
  <author>
    <first_name>James P.</first_name>
    <last_name>Bateman</last_name>
      <books>
        <title>Illinois Land Use Law</title>
      </books>
  </author>
</book_list>

然后我使用这段 JavaScript 代码来读取和显示数据:

> <script type="text/javascript"> if
> (window.XMLHttpRequest)   {  
> xhttp=new XMLHttpRequest();   } else
> // Internet Explorer 5/6   {  
> xhttp=new
> ActiveXObject("Microsoft.XMLHTTP");  
> } xhttp.open("GET","books.xml",false);
> xhttp.send("");
> xmlDoc=xhttp.responseXML;
> 
> document.write("<table>"); var
> x=xmlDoc.getElementsByTagName("author");
> for (i=0;i<x.length;i++)   {  
> document.write("<tr><td>");  
> document.write(x[i].getElementsByTagName("first_name")[0].childNodes[0].nodeValue);
> document.write("&nbsp;");  
> document.write(x[i].getElementsByTagName("last_name")[0].childNodes[0].nodeValue);
> document.write("</td><td>");  
> document.write(x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue);
> document.write("</td></tr>");   }
> document.write("</table>"); </script>

代码运行良好,只是它只返回每个作者的第一个标题元素。我有点理解它为什么这样做,但我不知道如何嵌套另一个循环,所以当脚本运行时,它会显示作者的所有标题,而不仅仅是第一个。每当我尝试嵌套循环时,它都会破坏整个脚本。

【问题讨论】:

  • 你为什么使用 document.write?

标签: javascript xml dom loops nested


【解决方案1】:
getElementsByTagName("title")[0].childNodes[0].nodeValue

这就是为什么。你只取第一个标题。再放一个循环,为getElementsByTagName("title")[i]生成所有i

我的建议: 使用 jquery 并在 3 行中编写您的代码,而不会出现这样的问题。

【讨论】:

  • 谢谢 Naugtur,我在 jQuery 方面的经验甚至更少,但这很有帮助,我认为那行是问题所在。我试图放入这样的 for 循环: var y=x[i].getElementsByTagName("books"); for (n=0;n