mercredi 23 octobre 2019

use javascript to parse a nested XML matrix

I have an xml file that is a structured Restaurant menu and i need to display the menu in an html page i thought i complimented the xml correctly but not my page does not work correctly at all and I cannot figur out why.

js code:

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>";
}
}
}
}

Here is the xml :

<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>

I intend to implement it for the rest of the values as well but I am at a loss currently




Aucun commentaire:

Enregistrer un commentaire