Вы можете установить для свойства 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();