2017-03-15 58 views
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> 

回答

0

我浪费了这个网站的时间。我的错。我的老师包括XML文件没有正确关闭的标签