我对HTML,JavaScript和XML(在前两个版本的上下文中)都很陌生,所以请记住这一点。我有以下XML文档:
<?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>
我会尝试解释结构尽可能短:最重要的元素是&#34;大学&#34;它包含一个孩子&#34;学生&#34;。 &#34;学生&#34;另一方面,可以包含多个&#34;学生&#34;元素,每个都有一个独特的学生识别&#34; sid&#34;作为属性,&#34;姓氏&#34;元素,&#34;名字&#34;元素和元素&#34;课程&#34;其中包含所有课程(每个课程由&#34;课程&#34;元素&#34;学生参加过课程.A&#34;课程&#34;元素也有一个唯一的标识,代表一门课程(例如上面:MB111,MB112)或模块(例如上面的例子:MB100,MB110)。&#34; course&#34;包含的另一个元素是&#34; grade&#34;元素,它可以是两种类型 - &# 34;简单&#34;和&#34;复杂&#34;。可以进行多次尝试,并且每次尝试都使用等级进行评估(例如上面:对于MB100,我们有两次尝试)。简单等级用于包含等级的模块。单个课程(例如上面:MB100)。另一方面,复杂等级是每个课程的所有简单等级的算术平均值,一个模块包括单个课程的所有尝试的最高等级(例如上面:MB110有等级= 2.0,这是每个课程的算术平均值1.0和3.0,其中3.0是最高等级的尝试e course MB112)。
那就是说我想创建一个HTML页面并使用JavaScript生成一个表,其中包含所有学生。目前我正试图展示&#34; sid&#34;每个学生的属性&#34;元素加上他/她的名字和姓氏。我的页面源代码如下所示:
<!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(Debian中的Firefox)调试器我注意到x变量有两个孩子,它们都给出了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编辑的支持)但我或多或少被迫使用它。这个问题虽然看起来与我亲自编写的内容有关。
答案 0 :(得分:1)
哈哈,您已将firstname
代码标记错误,应使用</firstname>
代替</lastname>
关闭代码。 :P
应用此JS:
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 (var 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>");
这是你的固定XML:
<?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</firstname>
<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>