#javascript #html #xml
#javascript #HTML #xml
Вопрос:
Я пытаюсь использовать JavaScript для отображения данных из XML-файла. Мои данные не отображаются на веб-странице, и я не уверен, почему.
Будем признательны за любую помощь / совет. Мой код показан ниже.
ПРИМЕЧАНИЕ — У меня нет опыта работы с XML, поэтому имейте в виду, что я совершенно новичок в этом.
<script>
var xmlData;
function loadXml () {
var filename = "CDLibrary.xml";
var XMLhttp = new XMLHttpRequest();
XMLhttp.open("GET", filename, true);
var ok = true;
try {
XMLhttp.send();
}
catch(err) {
ok = false;
alert ("Database not found");
}
if (ok) {
xmlData = XMLhttp.responseXML;
displayXml(xmlData);
}
}
function displayXml () {
var CdElements;
var CdTitle;
var count;
CdElements = xmlData.getElementsByTagName("CD");
for (count = 0; count < CdElements.length; count=count 1) {
CdTitle = CdElements[count].getElementsByTagName("title");
document.getElementById("output").innerHTML = document.getElementById("output").innerHTML CdTitle[0].childNodes[0].nodeValue "</br>";
}
}
</script>
</head>
<body>
<div>
<p id="output">
</p>
<p id="buttons">
<input type="button" id="btnDisplay" value="Display CDs" onclick="loadXml();">
</div>
</body>
Комментарии:
1. w3schools.com/xml/tryit.asp?filename=tryajax_xml2
2. Я пытался использовать это, но простое переключение xml-файла и изменение элементов, которые нужно получить, не сработало.
3. 1 ==>
onclick="loadXml();"
вместоonclick="displayXml()"
2 ==> добавитьdisplayXml(xmlData)
послеxmlData = XMLhttp.responseXML;
и протестировать4. w3schools.com/xml/cd_catalog.xml возможно, в вашем xml-файле вы изменили значение CD
5. Мамдух, спасибо, теперь он выдает ошибку, в которой говорится, что база данных не найдена. Видите ли вы какие-либо другие ошибки? Или это связано с самой базой данных?
Ответ №1:
<html>
<head><title>Import XML Data</title></head>
<body>
<div>
<p id="output">
</p>
<p id="buttons">
<input type="button" id="btnDisplay" value="Display CDs" onclick="loadXml()">
</div>
<script>
var xmlData;
function loadXml () {
var filename = "CDLibary.xml";
var XMLhttp = new XMLHttpRequest();
XMLhttp.open("GET", filename, true);
var ok = true;
try {
XMLhttp.send();
}
catch(err) {
ok = false;
alert ("Database not found");
}
if (ok) {
xmlData = XMLhttp.responseXML;
displayXml(xmlData);
}
}
function displayXml(xmlDataBase) {
var CdElements;
var CdTitle;
var count;
CdElements = xmlDataBase.getElementsByTagName("CD");
for (count = 0; count < CdElements.length; count=count 1) {
CdTitle = CdElements[count].getElementsByTagName("title");
document.getElementById("output").innerHTML = document.getElementById("output").innerHTML CdTitle[0].childNodes[0].nodeValue "</br>";
}
}
</script>
</body>
</html>
Комментарии:
1. У меня есть тот же код, но он говорит, что база данных не найдена. Это потому, что мой скрипт находится в тегах head, а не в теле?
2. Не пытайтесь установить
XMLhttp.open("GET", filename, true);
вместо false3. и URL-адрес файла должен быть правильным и находиться в том же домене
4. База данных пока не найдена 🙁
5. находится ли ваш XML-файл в том же каталоге, что и ваша HTML-страница?
Ответ №2:
Вы не используете var xmlData, вместо этого вы используете var xmlDataBase. Замените свой код на:
CdElements = xmlData.getElementsByTagName("CD");
И поскольку вы используете глобальную переменную xmlData, она доступна внутри функции displayXml, в этом случае нет необходимости в функции displayXml (xmlDataBase), если вы используете функцию displayXml(), этого будет достаточно.
Комментарии:
1.
xmlDataBase
аргумент не является переменным, и проблема не в этом2. Я внес изменения, но данные по-прежнему не отображаются.
Ответ №3:
Используя ссылку w3schools и изменив некоторую информацию и каталог, я заставил его работать. Должно быть, в шаблоне, которому я следовал, произошла ошибка, спасибо всем вам за ваше время и усилия.
<html>
<style>
table,th,td {
border : 1px solid black;
border-collapse: collapse;
}
th,td {
padding: 5px;
}
</style>
<body>
<button type="button" onclick="loadDoc()">Get my CD collection</button>
<br><br>
<table id="demo"></table>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 amp;amp; this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "CDLibrary.xml", true);
xhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Artist</th><th>Title</th></tr>";
var x = xmlDoc.getElementsByTagName("CD");
for (i = 0; i <x.length; i ) {
table = "<tr><td>"
x[i].getElementsByTagName("performer")[0].childNodes[0].nodeValue
"</td><td>"
x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue
"</td></tr>";
}
document.getElementById("demo").innerHTML = table;
}
</script>
</body>
</html>