在javascript中只获取另一个节点内的节点

时间:2013-11-26 21:05:33

标签: javascript xml dom

这是我的XML

<?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];

从“BOOK”部分获取的信息不是来自章节。

我确信有人知道怎么做到这一点。

感谢

2 个答案:

答案 0 :(得分: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()方法(btw使jQuery的很大一部分过时),你可以省去很多痛苦。

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

答案 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
   }
}