У меня есть такой XML:
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<rss xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.0">
<channel>
<title>title of XML</title>
<description>description of XML</description>
<ttl>720</ttl>
<item>
<title>title_01</title>
<description>value of item 01</description>
</item>
<item>
<title>title_02</title>
<description>value of item 02</description>
</item>
.
.
.
.
<item>
<title>title_XX</title>
<description>value of item XX</description>
</item>
</channel>
</rss>
И мне нужно получить значение от элементов к элементам HTML. Из элемента ITEM, где TITLE имеет конкретное уникальное значение, поместите значение DESCRIPTION в элемент HTML:
<body>
<div class = "cont">
<div>
<span id = "some_id01">Here put the DESCRIPTION value from the XML ITEM which contains the specific TITLE value</span>
<span id = "some_id02"></span>
</div>
<div>
<span id = "some_id03"></span>
<span id = "some_id04"></span>
</div>
<div>
<span id = "some_idXX"></span>
</div>
</div>
</body>
Что-то вроде этого. Но здесь нет циклов, только фиксированное количество HTML-элементов. Может ли кто-нибудь помочь мне с оптимальным кодом, в XML может быть до 100 элементов ITEM.
Большое спасибо
Привет, XML размещен на веб-сервере. например 4ds.online/bs/bistroreal/pondelitest.xml Нет базы данных - она загружается вручную через FTP. Можно использовать php, jqeury ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто идея для ссылки, надеюсь, что это поможет:
const getElement = (id) => {
return document.getElementById(id) || null;
};
const getIdByTitle = (title) => {
return title.split('_')[1];
};
const load = (file) => {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.onload = () => {
return resolve(xhr.responseXML.documentElement);
}
xhr.onerror = () => {
return reject(new Error('Error while getting XML.'));
}
xhr.open('GET', file);
xhr.responseType = "document";
xhr.send();
});
}
const process = (xml) => {
let nodes = Array.from(xml.getElementsByTagName('item'));
return nodes.map((node) => {
let title = node.getElementsByTagName('title')[0].innerHTML;
let description = node.getElementsByTagName('description')[0].innerHTML;
let id = getIdByTitle(title);
return {
id,
title,
description,
}
});
};
const display = (items) => {
return items.map((item) => {
let {
id,
description,
} = item;
let el = getElement(`some_id${id}`);
if (el) {
el.innerHTML = description;
}
});
};
load('relative_path_to_XML_file.xml')
.then(process)
.then(display)
.catch(console.trace);
Кажется, это работает:
$(document).ready(function() {
//feed to parse
var feed = "pondelitest.xml";
$.ajax(feed, {
accepts:{
xml:"application/rss+xml"
},
dataType:"xml",
success:function(data) {
$(data).find("title").each(function () {
if ($(this).text() == 'jidlo01' ) {
var v01 = $(this).next();
$("#jidlo01").append($.trim(v01.text()));
}
if ($(this).text() == 'jidlo02' ) {
var v01 = $(this).next();
$("#jidlo02").append($.trim(v01.text()));
}
});
// remove empty items
$('span.title').each(function() {
if ($(this).is(':empty')) $(this).parent().remove();
});
}
});
});
Можете ли вы указать, используете ли вы свой XML в качестве базы данных для онлайн-сервиса или это своего рода автономное упражнение? В первом случае нам нужно знать, какой серверный язык вы используете. В последнем случае, вероятно, вам нужно преобразование XQuery.