【发布时间】:2016-11-27 08:40:59
【问题描述】:
How the XML table should render
表格不会呈现,因为 .XML 文档缺少 UNIT 3 中 QUANTITY 的节点。
我们如何跳过 XML DOM 中缺失的节点?
XML 文档 (example.xml)
<?xml version="1.0" encoding="UTF-8"?>
<CUSTOMER_ORDER>
<UNIT>
<ID>Unit 1</ID>
<QUANTITY>45</QUANTITY>
<PRICE>25.99</PRICE>
</UNIT>
<UNIT>
<ID>Unit 2</ID>
<QUANTITY>209</QUANTITY>
<PRICE>9.95</PRICE>
</UNIT>
<UNIT>
<ID>Unit 3</ID> <!-- The QUANTITY node for Unit 3 is missing -->
<PRICE>14.99</PRICE>
</UNIT>
<UNIT>
<ID>Unit 4</ID>
<QUANTITY>156</QUANTITY>
<PRICE>35.88</PRICE>
</UNIT>
<UNIT>
<ID>Unit 5</ID>
<QUANTITY>25</QUANTITY>
<PRICE>199.00</PRICE>
</UNIT>
</CUSTOMER_ORDER>
这是 XML DOM(带有 HTML)
<!DOCTYPE html>
<html>
<style>
table,th,td {
border : 2px solid black;
border-collapse: collapse;
}
th,td {
padding: 5px;
}
</style>
<body>
<body onload="loadXMLDoc()">
<table id="test"></table>
<script>
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
testFunction(xmlhttp);
}
};
xmlhttp.open("GET", "example.xml", true);
xmlhttp.send();
}
function testFunction(xml) {
var table="<tr><th>Unit</th><th>Price</th><th>Quantity</th></tr>";
var xmlDoc = xml.responseXML;
var i;
var y = xmlDoc.getElementsByTagName("UNIT");
for (i = 0; i < y.length; i++)
{
var u = y[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;
var p = y[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue;
var q = y[i].getElementsByTagName("QUANTITY")[0].childNodes[0].nodeValue;
table += "<tr><td>" +
u + // Unit ID column
"</td><td>" +
p + // PRICE column
"</td><td>" +
q + // QUANTITY column
"</td></tr>";
}
document.getElementById("test").innerHTML = table;
}
</script>
</body>
</html>
【问题讨论】:
-
这是你自己的代码,它假设总会有一个“QUANTITY”元素。只需在查找值之前检查是否存在。
-
这似乎是一个合理的解决方案。你会怎么做?
-
在继续之前测试一下
y[i].getElementsByTagName("QUANTITY").length是否至少是1。 -
感谢您的提示。
标签: javascript html xml dom