0
我正在尝试使用菜单xml文件创建餐厅菜单。到目前为止,一切都工作完美,我甚至创建了一个辅助函数来简单地设置我需要的所有表,但是当传递“DRINKS”时,我得到错误“Uncaught TypeError:无法读取未定义的属性'childNodes'。我非常困惑,因为这在技术上(至少在我的脑海里)的工作方式与我处理的其他数据一样。任何人都可以告诉我我在处理xml文件的“DRINKS”部分时做错了什么?XML处理错误JavaScript
这里是我的javascript:
function processXML(data){
var parser = new DOMParser();
var xml = parser.parseFromString(data.responseText, "text/xml");
//Process breakfast
var html = document.getElementById("breakfast");
var tempHtml = tableCreator(xml, "BREAKFAST");
html.innerHTML += tempHtml;
//Process brunch
html = document.getElementById("brunch");
tempHtml = tableCreator(xml, "BRUNCH");
html.innerHTML += tempHtml;
//Process lunch
html = document.getElementById("lunch");
tempHtml = tableCreator(xml, "LUNCH");
html.innerHTML += tempHtml;
//Process dinner
html = document.getElementById("dinner");
tempHtml = tableCreator(xml, "DINNER");
html.innerHTML += tempHtml;
//Process drinks
html = document.getElementById("drinks");
tempHtml = tableCreator(xml, "DRINKS");
html.innerHTML += tempHtml;
}
//Simple table creator function to setup our menu
function tableCreator(xml, tag){
var mainElement = xml.getElementsByTagName(tag)[0].childNodes;
var tempHtml = "<table>";
for(var i = 0; i < mainElement.length; i++){
var temp = mainElement[i].childNodes;
tempHtml += "<tr>";
for(var j = 0; j < temp.length; j++){
tempHtml += "<td>" + temp[j].innerHTML + "</td>";
}
tempHtml += "</tr>";
}
tempHtml += "</table>";
return tempHtml;
}
这里是xml文件 “restaurant_menu.xml”:
<?xml version="1.0" encoding="UTF-8"?>
<MENU>
<BREAKFAST>
<APPETIZER><NAME>Fruit Bowl</NAME><PRICE>10.90</PRICE></APPETIZER>
<SALAD><NAME>Caeser SALAD</NAME><PRICE>3.90</PRICE></SALAD>
<SOUP><NAME>Chicken Noodle</NAME><PRICE>5.90</PRICE></SOUP>
<ANTREE><NAME>Omelet</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Scrambled Eggs</NAME><PRICE>20.90</PRICE></ANTREE>
<DESSERT><NAME>Apple Pie</NAME><PRICE>7.90</PRICE></DESSERT>
</BREAKFAST>
<BRUNCH>
<APPETIZER><NAME>Fruit Bowl</NAME><PRICE>10.90</PRICE></APPETIZER>
<APPETIZER><NAME>EggPlant Frits</NAME><PRICE>10.90</PRICE></APPETIZER>
<SALAD><NAME>House Salad</NAME><PRICE>3.90</PRICE></SALAD>
<SOUP><NAME>Chicken Noodle</NAME><PRICE>5.90</PRICE></SOUP>
<ANTREE><NAME>French Toast</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Omelet</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Scrambled Eggs</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Hamburg</NAME><PRICE>20.90</PRICE></ANTREE>
<DESSERT><NAME>Apple Pie</NAME><PRICE>7.90</PRICE></DESSERT>
</BRUNCH>
<LUNCH>
<APPETIZER><NAME>Calamari</NAME><PRICE>10.90</PRICE></APPETIZER>
<SALAD>Caeser Salad<PRICE>3.90</PRICE></SALAD>
<SALAD><NAME>Arugula Salad</NAME><PRICE>3.90</PRICE></SALAD>
<SOUP><NAME>Chicken Noodle</NAME><PRICE>5.90</PRICE></SOUP>
<SOUP><NAME>Italian Wedding Soup</NAME><PRICE>5.90</PRICE></SOUP>
<ANTREE><NAME>Steak</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Hamburg</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Angel Hair Pasta</NAME><PRICE>20.90</PRICE></ANTREE>
<DESSERT><NAME>Tiramisu</NAME><PRICE>7.90</PRICE></DESSERT>
</LUNCH>
<DINNER>
<APPETIZER><NAME>Calamari</NAME><PRICE>10.90</PRICE></APPETIZER>
<APPETIZER><NAME>EggPlant Frits</NAME><PRICE>10.90</PRICE></APPETIZER>
<SALAD>House Salad<PRICE>3.90</PRICE></SALAD>
<SALAD><NAME>Caeser Salad</NAME><PRICE>3.90</PRICE></SALAD>
<SOUP>Chicken Noodle<PRICE>5.90</PRICE></SOUP>
<SOUP><NAME>Italian Wedding Soup</NAME><PRICE>5.90</PRICE></SOUP>
<SOUP><NAME>Roasted Patato</NAME><PRICE>5.90</PRICE></SOUP>
<ANTREE><NAME>Steak</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Hamburg</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Angel Hair Pasta</NAME><PRICE>20.90</PRICE></ANTREE>
<ANTREE><NAME>Roasted Duck</NAME><PRICE>20.90</PRICE></ANTREE>
<DESSERT><NAME>Apple Pie</NAME><PRICE>7.90</PRICE></DESSERT>
<DESSERT><NAME>Tiramisu</NAME><PRICE>7.90</PRICE></DESSERT>
<DESSERT><NAME>Creme Brule</NAME><PRICE>7.90</PRICE></DESSERT>
</DNNER>
<DRINKS>
<BEER><NAME>Bud Weiser</NAME><PRICE>5.90</PRICE></BEER>
<BEER><NAME>Hefe Weissbier</NAME><PRICE>6.90</PRICE></BEER>
<WINE><NAME>Cabernet Sauvignon</NAME><FROM>Napa Valley</FROM><PRICE>15.90</PRICE></WINE>
<WINE><NAME>Margaux</NAME><PRICE>50.90</PRICE></WINE>
<WINE><NAME>Pinot Noir</NAME><FROM>Napa Valley</FROM><PRICE>12.90</PRICE></WINE>
<WINE><NAME>Chianti</NAME><PRICE>10.90</PRICE></WINE>
<COFFEE><NAME>Star Bucks</NAME><PRICE>3.90</PRICE></COFFEE>
<SODA>Coca Cola<PRICE>3.90</PRICE></SODA>
<SODA>Sprite<PRICE>3.90</PRICE></SODA>
</DRINKS>
</MENU>