显示XML文件中的节点

时间:2013-08-07 11:27:14

标签: javascript xml

我有以下XML文件。我希望在comment节点值等于“hey”(例如)的条件下显示节点title的每个子节点。

<?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 个答案:

答案 0 :(得分: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;
            }
        }
    }
}

<强>样本

<强> UPDATE JSFIDDLE