Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript在同级节点值的基础上访问xml节点值?_Javascript_Jquery_Xml_Xml Parsing - Fatal编程技术网

如何使用javascript在同级节点值的基础上访问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

我有一个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>

日常意大利语
吉娅达·德·劳伦蒂斯
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,我还是不明白。你复制/粘贴了你的问题。你想要所有作者和相应的价格吗(如你的代码所示),或者您是否要求特定作者并希望为该作者找到价格(如您的评论所示)?是的,我有特定作者并希望为该作者找到价格