如何使用javascript基于兄弟节点值访问xml节点值?

时间:2015-03-23 06:00:57

标签: 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 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());
  }

提前致谢

1 个答案:

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