2013-08-07 3 views
0

У меня есть следующий XML-файл. Я хочу отобразить каждый дочерний узел узла comment при условии, что значение узла title равно «эй» (например).Отображение узлов из файла XML

<?xml version="1.0" encoding="ISO-8859-1"?> 
<database> 
    <entry> 
    <title>hey</title> 
    <content>it works!!</content> 
    <time>8/6/2013 3:05:59 PM</time> 
    <comment><title>aa</title><text>bb</text><rating>2</rating></comment> 
    <comment><title>yyyyy</title><text>yyyy</text><rating>0</rating></comment> 
    </entry> 
    <entry> 
    <title>aaaaaaaaaaaaaa</title> 
    <content>aaaaaaaaa</content> 
    <time>8/6/2013 3:08:11 PM</time> 
    </entry> 
</database> 

Я пытался сделать это с некоторыми for петель, но это не всегда работает. Есть ли простой способ решить мою проблему с помощью javascript?

Вот пример кода, который я пытался использовать (только первая часть). Как мне продолжать?

x=xmlDoc.documentElement.childNodes; 

for (a=0;a<x.length;a++) { 
    if (x.item(a).nodeType==1) { 
     if(x.item(a).getElementsByTagName("title")[0].childNodes[0].nodeValue=="<?php echo $_REQUEST["title"]; ?>") { 
      for (b=0;b<3;b++) { 
       document.getElementById("comments").innerHTML += "<h3>"+x.item(a).getElementsByTagName("comment")[b].childNodes[0].textContent+"</h3>"; 
       document.getElementById("comments").innerHTML += "<p>"+x.item(a).getElementsByTagName("comment")[b].childNodes[1].textContent+"</p>"; 
       document.getElementById("comments").innerHTML += "<div>"+x.item(a).getElementsByTagName("comment")[b].childNodes[2].textContent+"</div>"; 
       document.getElementById("comments").innerHTML += "<hr></hr>"; 
      } 
     } 
    } 
} 

ответ

1

Я ответил что-то подобное здесь, надеюсь, что это помогает ... SO

Если не дайте мне знать

HTML

<div id='comments'></div> 

JAVASCRIPT

var xmlDoc = loadXMLString(xml), 
    x = xmlDoc.documentElement.childNodes, 
    domStr = '', 
    commentDiv = document.getElementById("comments"); 

for (var i = 0; i < x.length; i++) { 
    if (x[i].nodeType === 1){ 
     var commmentNode = x[i].getElementsByTagName("comment"); 
     for (var j = 0; j < commmentNode.length; j++){ 
      if (commmentNode[j].getElementsByTagName('title')[0].childNodes[0].textContent === "hey") { 
       domStr += "<h3>" + commmentNode[j].getElementsByTagName('title')[0].childNodes[0].textContent + "</h3>"; 
       domStr += "<p>" + commmentNode[j].getElementsByTagName('text')[0].childNodes[0].textContent + "</p>"; 
       domStr += "<div>" + commmentNode[j].getElementsByTagName('rating')[0].childNodes[0].textContent + "</div><hr></hr>"; 
       console.log(domStr); 
       commentDiv.innerHTML += domStr; 
      } 
     } 
    } 
} 

DEMO

UPDATE JSFIDDLE

+0

Не могли бы вы помочь, чтобы отобразить все дочерние узлы из комментария узла? –

+0

@PhilippBraun Update – dcodesmith

+0

одобрит ваш ответ. но не могли бы вы сказать мне, как я получаю количество узлов комментариев в узле ввода? –

Смежные вопросы