JavaScript и XML Dom - вложенный цикл - PullRequest
2 голосов
/ 22 марта 2010

Итак, я новичок в 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>

Код работает хорошо, за исключением того, что он возвращает только первый элемент title каждого автора. Я немного понимаю, почему он это делает, но я не знаю, как вложить другой цикл, поэтому при запуске скрипта отображаются все заголовки автора, а не только первый. Всякий раз, когда я пытаюсь вложить цикл, он нарушает весь сценарий.

1 Ответ

1 голос
/ 22 марта 2010
getElementsByTagName("title")[0].childNodes[0].nodeValue

вот почему. Вы берете только первый титул. Поместите еще один цикл, который будет генерировать все i для getElementsByTagName("title")[i]

Мой совет: используйте jquery и без проблем напишите свой код в 3 строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...