Как я могу вызвать конкретные записи из XML, используя JavaScript - PullRequest
0 голосов
/ 24 февраля 2019

Итак, у меня есть этот XML-код

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

, и я хочу иметь возможность получить имя книги, используя автора в соответствии с именем автора или наоборот, и назначить его переменной с помощью JavaScript.Я пытаюсь избежать использования серверного программирования и хочу использовать только JavaScript.Я впервые пишу здесь, так как я учусь в старшей школе, которая недавно научилась программировать.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Вы можете установить для свойства XMLHttpRequest() responseType значение "document", overrideMimeType() установить для "text/html", чтобы получить HTML #document как response в обработчике load.

Создатьфункция, которая ожидает, что простой объект будет передан в качестве параметра, имеющего свойство "author" или "bookname" со значением, установленным в textContent элемента XML <book> <bookname> или <author> для соответствия.Выполните итерацию NodeList из <book> элементов и children HTMLCollection, проверьте, равен ли localName "bookname" или "author", и соответствует ли textContent параметр, переданный функции, если true, get parentElement ссылка, используйте .querySelector() с переданным "bookname", если "author" является свойством параметра объекта, или "author", если "bookname" передано как параметр, возвращают textContent соответствующего элемента или '"author of <bookname> OR book by <author>" not found.'.

const request = new XMLHttpRequest();
request.responseType = "document";
request.overrideMimeType("text/html");
const xml = `<?xml version="1.0" encoding="UTF-8"?><book>
<bookname>book1</bookname>
<author>authorman</author>
</book>
<book>
<bookname>book2</bookname>
<author>authorperson</author>
</book>`;
const getBookData = (books, {bookname, author} = {}) => {
  for (const {children} of books) { 
    for (const book of children) {
      const {localName, textContent} = book;       
        if (localName === "bookname" && bookname === textContent 
            || localName === "author" && author === textContent) {
          return book.parentElement
                 .querySelector(author ? "bookname" : "author")
                 .textContent
         }
       }
     }
     return `${author ? "book by" : "author of"} "${bookname || author}" not found in library.`;
}
request.addEventListener("load", e => {
  const html = request.response;
  const books = html.querySelectorAll("book");
  console.log(getBookData(books, {author:"authorman"}));
  console.log(getBookData(books, {bookname:"book2"}));
  console.log(getBookData(books, {author:"authorx"}));
  console.log(getBookData(books, {bookname:"book3"}));
})
request.open("GET", `data:application/xml,${encodeURIComponent(xml)}`);
request.send();
0 голосов
/ 24 февраля 2019

Надеюсь, это поможет вам: -

<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>
0 голосов
/ 24 февраля 2019

попробуйте

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...