我有一个xml即
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
我在javascript中使用xml dom解析器获得作者的价值。现在我想获得与我得到的作者的价值相对应的价格节点的价值。我怎么能实现这个目标。作者我用这个
var xmlDoc=loadXMLDoc("books.xml");
var x=xmlDoc.getElementsByTagName("author");
var array = [];
for (i=0;i<x.length;i++)
{
array.push(x[i].childNodes[0].nodeValue);
alert(array.toString());
}
提前致谢
答案 0 :(得分:0)
您可以尝试的一件事是迭代x.nextElementSibling
,直到您获得正确的x.nodeName
。但我不喜欢这种方法;它挑剔而且脆弱。
相反,我不是按"author"
搜索,而是按"book"
搜索;然后迭代每本书,并致电book.getElementsByTagName('author')[0]
和book.getElementsByTagName('price')[0]
。或者,如果您确实需要搜索"author"
,则可以转到author.parentNode.getElementsByTagName('price')[0]
。
编辑:要获得特定作者的价格,我宁愿使用XPath:
function priceForAuthor(author, xmldoc) {
var escapedAuthor = JSON.stringify(author);
var xpath = '//author[text()=' + escapedAuthor + ']/../price/text()';
var price = xmldoc.evaluate(
xpath,
x.documentElement,
null,
XPathResult.NUMBER_TYPE,
null
).numberValue;
return price;
}
priceForAuthor("J K. Rowling", xmldoc);
// => 29.99