Я совершенно не знаком с HTML, JavaScript и XML (в контексте предыдущих двух), так что имейте это в виду. У меня есть следующий XML-документ:document.getElementsByTagName() возвращает неправильный элемент
<?xml version="1.0" encoding="UTF-8"?>
<university
xmlns="myNS:university"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="myNS university.xsd">
<students>
<student sid="jdoe12345>
<lastname>Doe</lastname>
<firstname>John</lastname>
<courses>
<course cid="MB100">
<grade attempt="1" term="W10" type="simple">5.0</grade>
<grade attempt="2" term="S11" type="simple">2.3</grade>
</course>
<course cid="MB110">
<grade attempt="1" term="S11" type="complex">2.0</grade>
<course cid="MB111">
<grade attempt="1" term="S11" type="simple">1.0</grade>
</course>
<course cid="MB112">
<grade attempt="1" term="S11" type="simple">5.0</grade>
<grade attempt="2" term="S11" type="simple">3.0</grade>
</course>
</course>
...
</courses>
</student>
...
</students>
</university>
Я попытаюсь объяснить, что структура как можно короче: Верхний элемент «университет» и содержит ни одного ребенка «студентов». «студенты», с другой стороны, могут содержать несколько «студенческих» элементов, каждый из которых имеет уникальный идентификатор студента «sid» как атрибут, элемент «lastname», элемент «firstname» и элемент «курсы», который содержит все курсы (каждый из которых представлен элемент «курс». Учащийся «курса» также имеет уникальную идентификацию, которая либо представляет собой один курс (пример выше: MB111, MB112), либо модуль (пример выше: MB100, MB110). этот «курс» содержит элемент «grade», который может быть двух типов - «простой» и «сложный». Доступны множественные попытки, и каждая попытка оценивается с оценкой (пример выше: для MB100 у нас есть две попытки). Простой класс используется для модуля, состоящего из одного курса (пример выше: MB100). С другой стороны, сложный класс - это среднее арифметическое всех простых классов каждого курса, модуль состоит из того, чтобы выполнить самый высокий уровень всех попыток один курс (пример выше: MB110 имеет оценку = 2.0, который является средним арифметическим 1,0 и 3,0 для каждого из курсов, в котором он состоит из 3,0, являющихся попытками с высшим уровнем для курса MB112).
Это я хочу создать HTML-страницу и создать таблицу с использованием JavaScript со всеми учащимися в ней. В настоящее время я пытаюсь отобразить атрибут «sid» для каждого «студенческого» элемента плюс его/ее имя и фамилию. Мой исходный код страницы выглядит следующим образом:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My pretty page</title>
<link rel="stylesheet" type="text/css" href="my_stylesheet.css"/>
</head>
<body>
<script type="text/javascript">
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","/home/USERNAME/xmlplayground/university.xml",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
document.write("<table border='1'>");
var x = xmlDoc.getElementsByTagName("*","student");
for(i = 0; i < x.length; i++) {
document.write("<tr><td>");
document.write(x[i].getAttribute("sid"));
document.write("</td><td>");
document.write(x[i].getElementsByTagName("*","lastname")[0].childNodes[0].nodeValue);
document.write("</td><td>");
document.write(x[i].getElementsByTagName("*","firstname")[0].childNodes[0].nodeValue);
document.write("</td></tr>");
}
document.write("</table>");
</script>
</body>
</html>
По некоторым причинам я получаю очень странный результат:
+--------------------------------------------------------------------------------------------------------------------------------------+
| null | 5.0 --------------------------------------------------------^ | 5.0 --------------------------------------------------------^ |
+--------------------------------------------------------------------------------------------------------------------------------------+
| null | EMPTY CELL HERE!!! | NO CELL HERE!!!
+----------------------------------------------------------------------+
Использование Iceweasel (в Firefox в Debian) отладчик я заметил, что переменная х имеет 2 дети оба из которых дают ошибку InnerHTML:
"XML Parsing Error: not well-formed
Location: file:///home/USERNAME/xmlplayground/university.xml
Line Number 12, Column 57:
<sourcetext xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">
<grade attempt="1" term="WS10" type=simple>5.0</grade>--------------------------------------------------------^
</sourcetext>"
Кроме того, я должен упомянуть, что я использую Oxygen XML Editor, который до сих пор оказались очень глючный (для работы с XSD, DTD и XSLT неупомянуть о его почти несуществующей поддержке для редактирования JavaScript), но я более или менее вынужден использовать его. Проблема, хотя выглядит более тесно связана с тем, что я лично написал.
Параметр '.getElementsByTagName()' функция просто берет 1 аргумент. – Pointy
Вы правы. Когда я удалил его, хотя ничего не получил. Отладчик говорит, что x имеет длину = 0.: -/ – rbaleksandar
Hm, ' 5.0 ' * * * не корректно сформирован (отсутствуют кавычки вокруг 'type' значение атрибута). –
Bergi