2013-11-26 1 views
0

Вот мой XMLполучить только узел внутри другого в JavaScript

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<book> 
<title>My Title</title> 
<description></description> 
    <chapter> 
    <title>Chapter 1</title> 
    <description>text inside chapter</description> 
    </chapter> 
</book> 

Поэтому я стараюсь, чтобы получить информацию ВНУТРИ <chapter> теге

вот мой код:

function afficheTitres(doc) { 
    Items = doc.getElementsByTagName("chapter"); 
    elementol = document.createElement("ol"); 
    var longueur = Items.length; 
    for (k = 0; k &lt; longueur ; ++k) { 
    elementli = document.createElement("li"); 

x=doc.getElementsByTagName("title")[k]; 
var longueurtitre = x.length; 
y=x.childNodes[0]; 
txt=y.nodeValue; 
test = document.createTextNode(txt) 
elementli.appendChild(test); 

    elementretour = document.createElement('br'); 
     elementli.appendChild(elementretour 
    ); 

descript=doc.getElementsByTagName("description")[k]; 
descriptNode=descript.childNodes[0]; 
txt2=descriptNode.nodeValue; 
test2 = document.createTextNode(txt2) 
elementli.appendChild(test2); 

    elementol.appendChild(elementli); 
    } 
    body = document.getElementsByTagName("body").item(0); 
    body.appendChild(elementol); 
} 

Проблема заключается в том что эти линии:

x=doc.getElementsByTagName("title")[k]; 

и

descript=doc.getElementsByTagName("description")[k]; 

получить информацию, поступающую из раздела «ЗАБРОНИРОВАТЬ» не из этой главы.

Я уверен, что кто-то знает, как это получить.

благодаря

+2

Почему вы помечаете его узлом js? – tomahim

+0

@tomahim мои мысли точно, я удалил его. – robertklep

+0

Извините, меня знают, и я допустил ошибку. – baronming

ответ

0

В своем коде вы используете doc переменную, которая, как представляется, быть что-то унаследовали от document объекта, см the reference.

.getElementsByTagName("title") метод возвращает массив тегов title, который появляется не только в chapter, но и в корневом элементе, book.

Поиск от главы узла, а не из дока

var chapters = doc.getElementsByTagName("chapter"); 
for(var i=0; i<chapters.length; ++i) { 

    // search from book, which is what you don't want 
    // doc.getElementsByTagName("title")[0]; 

    // search from chapter, you want this 
    chapters[i].getElementsByTagName("title")[0]; 
} 

Примечание

В новых браузерах (IE8 +), вы можете сэкономить много боли, если вы используете .querySelectorAll() метод (который кстати делает большая часть jQuery устарела).

var titles = doc.querySelectorAll("chapter title"); 
alert(titles[0].innerHTML); // Chapter 1 
0

Вы пробовали получать коллекцию глав первой:

var chapters =doc.getElementsByTagName("chapter"); 

И затем переборе каждой главы, чтобы найти дочерние узлы этого экземпляра в коллекции?

if (chapters.length > 0) 
{ 
    for (i = 0; i < resultList.length; i++) 
    { 
     var title = chapters[i].getElementsByTagName("title")[0]; 
     var desc = chapters[i].getElementsByTagName("description")[0]; 

     // do work here 
    } 
} 
Смежные вопросы