Reputation: 45
I'm working a problem here that gets the size calculates the price. I just need to tack on attribute prices, but I'm unable to figure out how to go further. I've tried making a nested for loop, but have been unsuccessful.
<?xml version= "1.0" encoding= "UTF-8" standalone="yes" ?>
<PizzaParlor>
<Order>
<Pizza Size="large">
<Vegetarian>
<Mushroom Price="1.99">
</Mushroom>
</Vegetarian>
</Pizza>
<Pizza Size="small">
<Vegetarian>
<Spinach Price="1.45">
</Spinach>
</Vegetarian>
</Pizza>
<Pizza Size="medium">
<Vegetarian>
<Pineapple Price="1.79">
</Pineapple>
</Vegetarian>
</Pizza>
<Pizza Size="small">
<Vegetarian>
<Mushroom Price="1.99">
</Mushroom>
</Vegetarian>
</Pizza>
<Pizza Size="large">
<Vegetarian>
<Mushroom Price="1.99">
</Mushroom>
</Vegetarian>
</Pizza>
<Pizza Size="large">
<non-vegetarian>
<Anchovies Price="1.99">
</Anchovies>
</non-vegetarian>
</Pizza>
<Pizza Size="small">
<non-vegetarian>
<Ham Price="1.45">
</Ham>
</non-vegetarian>
</Pizza>
<Pizza Size="medium">
<non-vegetarian>
<Anchovies Price="1.79">
</Anchovies>
</non-vegetarian>
</Pizza>
<Pizza Size="small">
<non-vegetarian>
<Pepperoni Price="2.49">
</Pepperoni>
</non-vegetarian>
</Pizza>
<Pizza Size="large">
<non-vegetarian >
<Chicken Price="2.99">
</Chicken>
</non-vegetarian >
</Pizza>
</Order>
</PizzaParlor>
I have this for my java program:
package pizza;
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class Pizza
{
public static void main (String [] args)
throws
IOException,
ParserConfigurationException,
SAXException
{
File CFile = new File ("pizzaparlor.xml");
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance ();
factory.setIgnoringComments (true);
factory.setIgnoringElementContentWhitespace (true);
factory.setValidating (true);
DocumentBuilder builder = factory.newDocumentBuilder ();
Document document = builder.parse (CFile);
Element root = document.getDocumentElement ();
Node orderNode = root.getFirstChild();
Node Pizza = orderNode.getFirstChild();
int countofPizzas = 0;
for(int i = 0 ; Pizza!=null; i ++){
countofPizzas ++;
Pizza = Pizza.getNextSibling();
}
System.out.println(countofPizzas);
double price = 0.0;
NodeList Orders = root.getFirstChild().getChildNodes();
for (int i = 0; i < Orders.getLength() ; i++)
{
Element pizzaSize = (Element) Orders.item(i);
String pSize = pizzaSize.getAttribute("Size");
if (pSize.equalsIgnoreCase("Large"))
price = 10.0;
if (pSize.equalsIgnoreCase("Medium"))
price = 7.0;
if (pSize.equalsIgnoreCase("Small"))
price = 5.0;
System.out.println("Pizza " + i + " " + pSize + " " + price);
}
}
}
Upvotes: 0
Views: 1565
Reputation: 196
If you are only interested in the Pizza nodes, you can use the getElementsByTagName() method to return them.
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class Pizza
{
public static void main (String [] args)
throws
IOException,
ParserConfigurationException,
SAXException
{
File CFile = new File ("pizzaparlor.xml");
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance ();
factory.setIgnoringComments (true);
factory.setIgnoringElementContentWhitespace (true);
factory.setValidating (false);
DocumentBuilder builder = factory.newDocumentBuilder ();
Document document = builder.parse (CFile);
NodeList pizzas = document.getElementsByTagName("Pizza");
for (int i = 0; i < pizzas.getLength() ; i++)
{
Element pizzaSize = (Element) pizzas.item(i);
String pSize = pizzaSize.getAttribute("Size");
if (pSize.equalsIgnoreCase("Large"))
price = 10.0;
if (pSize.equalsIgnoreCase("Medium"))
price = 7.0;
if (pSize.equalsIgnoreCase("Small"))
price = 5.0;
System.out.println("Pizza " + i + " " + pSize + " " + price);
}
}
}
Upvotes: 1