對於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」作爲屬性,「姓氏」元素,「名字」元素和包含所有課程的元素「課程」 「course」元素是「學生參加的」,「course」元素也有一個唯一的標識,它可以代表單個課程(上例:MB111,MB112)或模塊(上例:MB100,MB110)。 「課程」包含的是「成績」元素,可以是「簡單」和「複雜」兩種類型。多次嘗試可用,每次嘗試都會評分(如上例:對於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!!!
+----------------------------------------------------------------------+
(在Debian Firefox)的調試器使用Iceweasel的我已經注意到,X變量有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>"
我也不得不提,我使用氧XML編輯器,它至今已被證明是非常錯誤(與XSD,DTD工作和XSLT不提到它幾乎不存在對JavaScript編輯的支持),但我或多或少地被迫使用它。雖然這個問題看起來與我親自寫的東西更相關。
的'.getElementsByTagName()'函數只需要1個參數。 – Pointy 2014-10-17 14:24:35
你說得對。雖然我什麼也沒有得到,但當我將它移開時。調試器表示x的長度爲0.: -/ – rbaleksandar 2014-10-17 14:27:45
Hm,' 5.0 * *格式不正確(缺少「type」屬性的值)。 –
Bergi
2014-10-17 14:27:55