使用外部xml文件解析JavaScript中的xml

使用外部xml文件解析JavaScript中的xml,javascript,html,xml,Javascript,Html,Xml,我正在尝试用JavaScript解析XML文档,但收到一个类型错误:xmlDoc.getElementsByTagName(…)[0]未定义。我希望确保正确解析XML 下面是我加载外部XML的函数: function loadXML(callback) { var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/xml"); xobj.open('GET

我正在尝试用JavaScript解析XML文档,但收到一个类型错误:xmlDoc.getElementsByTagName(…)[0]未定义。我希望确保正确解析XML

下面是我加载外部XML的函数:

function loadXML(callback) {   

        var xobj = new XMLHttpRequest();
            xobj.overrideMimeType("application/xml");
        xobj.open('GET', 'restaurant_menu.xml', true); 
        xobj.onreadystatechange = function () {
              if (xobj.readyState == 4 && xobj.status == "200") {
                // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
                callback(xobj.responseText);
              }
        };
        xobj.send(null);  
}
然后,我在这个JavaScript函数中加载解析XML:

function showBreakfast() {

  loadXML(function(response) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(response, "text/xml");

        document.getElementById("breakfast").innerHTML = xmlDoc.getElementsByTagName("Name")[0].childNodes[0].nodeValue;
    });

}
但是我收到一个打字错误。我是否正确解析了XML?这是我的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>
  </DINNER>
  <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>

水果保龄球10.90
Caeser SALAD3.90
鸡肉面5.90
煎蛋卷20.90
炒鸡蛋20.90
苹果派7.90
水果保龄球10.90
茄子馅饼10.90
豪斯沙拉3.90
鸡肉面5.90
法式烤面包20.90
煎蛋卷20.90
炒鸡蛋20.90
汉堡20.90
苹果派7.90
卡拉马里群岛10.90
Caeser Salad3.90
芝麻菜沙拉3.90
鸡肉面5.90
意大利婚礼套餐5.90
牛排20.90
汉堡20.90
天使发粉20.90
提拉米苏7.90
卡拉马里群岛10.90
茄子馅饼10.90
豪斯沙拉3.90
Caeser Salad3.90
鸡肉面5.90
意大利婚礼套餐5.90
烤土豆片5.90
牛排20.90
汉堡20.90
天使发粉20.90
烤鸭20.90
苹果派7.90
提拉米苏7.90
乳酪蛋白7.90
巴德·韦瑟5.90
Hefe Weissbier6.90
赤霞珠纳帕谷15.90
Margaux50.90
诺伊尔纳帕谷比诺12.90
基安蒂10.90
星巴克3.90
可口可乐3.90
Sprite3.90

您说的是
xmlDoc.getElementsByTagName(“名称”)
,但您的XML没有
元素。它返回长度为零的节点列表。然后尝试读取该列表中第一项的
childNodes
,但由于没有,因此会出现错误


XML没有
元素。XML区分大小写

请提供完整的错误消息。TypeError:xmlDoc.getElementsByTagName(…)[0]未定义我认为您需要考虑标记名的大小写,换句话说,请尝试
…getElementsByTagName('name')…
它现在返回null。有什么建议吗?谢谢你我太傻了忽略了。但是,我现在得到的是TypeError:document.getElementById(…)为null