如何使用javascript在同级节点值的基础上访问xml节点值?
我有一个xml,即如何使用javascript在同级节点值的基础上访问xml节点值?,javascript,jquery,xml,xml-parsing,Javascript,Jquery,Xml,Xml Parsing,我有一个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 c
<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>
日常意大利语
吉娅达·德·劳伦蒂斯
2005
30
哈利·波特
J K.罗琳
2005
29.99
我使用javascript中的xml dom解析器获得了作者的值。现在我想得到price节点的值,对应于我得到的author的值。我怎样才能做到这一点。对于作者,我使用这个
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());
}
var xmlDoc=loadXMLDoc(“books.xml”);
var x=xmlDoc.getElementsByTagName(“作者”);
var数组=[];
对于(i=0;i你可以尝试的一件事是在x.nextElementSibling
上迭代,直到你得到正确的x.nodeName
。但是我不喜欢这种方法;它既挑剔又脆弱
相反,我不会通过“author”
,而是通过“book”
;然后迭代每本书,并调用book.getElementsByTagName('author')[0]
和book.getElementsByTagName('price')[0]
。或者如果您确实需要搜索“author”
,那么您可以转到author.parentNode.getElementsByTagName(“价格”)[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
我想在我得到的作者值的基础上得到price的值……假设我得到了作者的“J K.Rowling”值,那么我想在J K.Rowling的基础上得到price的值。您的代码不显示“author you get”,而是提取所有价格(针对所有作者)。你能澄清一下你的输入和输出吗?我通过这段代码var x=xmlDoc.getElementsByTagName(“作者”);var array=[];for(i=0;iSorry,我还是不明白。你复制/粘贴了你的问题。你想要所有作者和相应的价格吗(如你的代码所示),或者您是否要求特定作者并希望为该作者找到价格(如您的评论所示)?是的,我有特定作者并希望为该作者找到价格