如何使用JavaScript从XML调用特定条目

时间:2019-02-24 07:21:28

标签: javascript ajax xml

所以我有这个XML代码

<book>
<bookname>book1</bookname>
<author>authorman</author>
</book>
<book>
<bookname>book2</bookname>
<author>authorperson</author>
</book>

,我希望能够根据作者的名字使用作者的名字,反之亦然,然后使用JavaScript将其分配给变量。 我试图避免使用服务器端编程,而只想使用JavaScript。 这是我第一次在这里发帖,因为我是一名刚学会编程的高中生。

3 个答案:

答案 0 :(得分:1)

您可以将XMLHttpRequest() responseType属性设置为"document",将overrideMimeType()设置为"text/html"以将HTML #document设置为{{1} }在response处理程序中。

创建一个函数,该函数期望将普通对象作为参数传递,其属性为load"author",其值设置为"bookname" {{ 1}}元素textContentXML进行匹配。迭代<book>个元素中的<bookname><author> NodeList,检查<book>是否等于childrenHTMLCollection,然后localName与传递给函数的参数匹配,如果为true,则获取"bookname"引用,如果"author"是对象参数的属性,则对传递的textContent使用parentElement或{ {1}}如果将.querySelector()作为参数传递,则返回匹配元素的"bookname""author"

"author"

答案 1 :(得分:0)

尝试

  var text, parser, xmlDoc;  

    text="<book>
    <bookname>book1</bookname>
    <author>authorman</author>
    </book>
    <book>
    <bookname>book2</bookname>
    <author>authorperson</author>
    </book>";  

    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text,"text/xml");

    console.log(xmlDoc.getElementsByTagName("book")[0].childNodes[0].nodeValue); //book1

    console.log(xmlDoc.getElementsByTagName("book")[1].childNodes[0].nodeValue); //book2

答案 2 :(得分:0)

希望这对您有帮助:-

<script type="text/javascript">
  var xml = "<xml>"+
            "<book>"+
              "<bookname>book1</bookname>"+
              "<author>authorman</author>"+
            "</book>"+
            "<book>"+
              "<bookname>book2</bookname>"+
              "<author>author2</author>"+
            "</book>"+
            "</xml>";

  parser = new DOMParser();
  xmlDoc = parser.parseFromString(xml,"text/xml");
  authors   = xmlDoc.getElementsByTagName("author");
  booknames = xmlDoc.getElementsByTagName("bookname");

  var bookname = searchByAuthor('authorman', authors, booknames);
  alert(bookname);

  var authorname = searchByBookName('book2', authors, booknames);
  alert(authorname);
  
  function searchByAuthor(author_name, x, y){
      
      for (i = 0; i < x.length; i++) {
          if(x[i].childNodes[0].nodeValue == author_name){
            return y[i].childNodes[0].nodeValue;
          }  
      }
  }

  function searchByBookName(book_name, x, y){

    for (i = 0; i < y.length; i++) {
          if(y[i].childNodes[0].nodeValue == book_name){
            return x[i].childNodes[0].nodeValue;
          }  
      }
  }
</script>