这是我的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 < 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”部分获取的信息不是来自章节。
我确信有人知道怎么做到这一点。
感谢
答案 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
}
}