использовать JavaScript для разбора вложенной матрицы XML - PullRequest
0 голосов
/ 23 октября 2019

У меня есть XML-файл, который представляет собой структурированное меню ресторана, и мне нужно отобразить меню на HTML-странице. Я думал, что правильно сделал комплимент xml, но не сделал этого. Моя страница не работает правильно, и я не могу понять, почему.

JS код:

function loadmenu() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myFunction2(this);
        }
    };
    xhttp.open("GET", "menu.xml", true);
    xhttp.send();
}


function myFunction2(xml) {
    var i, x;
    var xmlDoc = xml.responseXML;
    for (x = 0; x < 2; x++;) {
        if (x == 0) {
            var table = "<table><tr><th>Breakfast</th> <th>price</th></tr>";
            var y = xmlDoc.getElementsByTagName("BREAKFAST");
            console.log(y[0].length);
            for (i = 0; i < y[0].getElementsByTagName("NAME").length; i++) {
                table += "<tr><td>" + y[0].getElementsByTagName("NAME")[i].childNodes[0].nodeValue + "</td> </tr>" +
                    "$" + y[0].getElementsByTagName("PRICE")[i].childNodes[0].nodeValue + "</td> </tr>";
            }
        } else if (x == 1) {
            var table = "<table><tr><th>Breakfast</th> <th>price</th></tr>";
            var y = xmlDoc.getElementsByTagName("BRUNCH");
            console.log(y[0].length);
            for (i = 0; i < y[0].getElementsByTagName("NAME").length; i++) {
                table += "<tr><td>" + y[0].getElementsByTagName("NAME")[i].childNodes[0].nodeValue + "</td> </tr>" +
                    "$" + y[0].getElementsByTagName("PRICE")[i].childNodes[0].nodeValue + "</td> </tr>";
            }
        }
    }
}

Вот 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>

Я собираюсь реализовать это и для остальных значений, но сейчас я в растерянности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...