Ich muss die Bestellsumme pro Kunde dieses XML-Datei Beispiel drucken.XML SAX Parsing
<OrderID id="10248">
<CustomerID>VINET</CustomerID>
<ProductName>Queso Cabrales</ProductName>
<UnitPrice>14.0000</UnitPrice>
<Quantity>12</Quantity>
<Freight>32.3800</Freight>
</OrderID>
<OrderID id="10248">
<CustomerID>VINET</CustomerID>
<ProductName>Singaporean Hokkien Fried Mee</ProductName>
<UnitPrice>9.8000</UnitPrice>
<Quantity>10</Quantity>
<Freight>32.3800</Freight>
</OrderID>
<OrderID id="10248">
<CustomerID>VINET</CustomerID>
<ProductName>Mozzarella di Giovanni</ProductName>
<UnitPrice>34.8000</UnitPrice>
<Quantity>5</Quantity>
<Freight>32.3800</Freight>
</OrderID>
<OrderID id="10249">
<CustomerID>TOMSP</CustomerID>
<ProductName>Tofu</ProductName>
<UnitPrice>18.6000</UnitPrice>
<Quantity>9</Quantity>
<Freight>11.6100</Freight>
</OrderID>
<OrderID id="10249">
<CustomerID>TOMSP</CustomerID>
<ProductName>Manjimup Dried Apples</ProductName>
<UnitPrice>42.4000</UnitPrice>
<Quantity>40</Quantity>
<Freight>11.6100</Freight>
</OrderID>
Was würde Ich mag das Ergebnis so aussehen:
VINET: 537,14
TOMSP: 1886,62
usw.
Diese Summen aus Einzelpreis gemacht werden * Menge + Fracht, vorgeschlagen aus den Ergebnissen. Wenn ich Ihnen den Rest des XML gab, könnten Sie es besser sehen, aber um der Zeit willen habe ich es kleiner gemacht. Ich bekomme auch einen Fehler, ein Dezimalformat für diese drei Variablen und ich bin nicht sicher, warum.
public class DataProcessor2 extends DefaultHandler {
boolean unitPrice = false;
boolean collectCount = false;
boolean freight = false;;
boolean quantity = false;
boolean customer = false;
float currentCount = 0;
float totalCount = 0;
float unitPriceCount = 0;
float freightCount = 0;
float quantityCount = 0;
//unitprice, freight, quantity
public DataProcessor2(){
super();
}
public void startDocument() {
// TODO Auto-generated method stub
System.out.println("Order Totals Per Customer");
}
public void endDocument() {
// TODO Auto-generated method stub
System.out.println("Document END");
}
public void startElement(String namespaceUri, String localName,
String qualifiedName, Attributes attributes) {
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
if (qualifiedName.equals("CustomerID")){
customer = true;
}
if(qualifiedName.equals("UnitPrice")){
unitPrice = true;
//unitPriceCount = Float.parseFloat((qualifiedName));
}
if(qualifiedName.equalsIgnoreCase("Freight")){
freight = true;
//freightCount = Float.parseFloat(df.format(qualifiedName));
}
if(qualifiedName.equalsIgnoreCase("Quantity")){
quantity = true;
//quantityCount = Float.parseFloat(df.format(qualifiedName));
}
if(unitPrice & freight & quantity){
collectCount = true;
//currentCount = unitPriceCount * quantityCount + freightCount;
}
}
public void endElement(String namespaceUri, String localName,
String qualifiedName, Attributes attributes) {
//System.out.println("End Element "+ qualifiedName);
}
public void characters (char[] ch, int start, int length) throws SAXException{
if (customer) {
System.out.println(new String(ch, start, length));
customer = false;
}
if(unitPrice){
// System.out.println(new String(ch, start, length));
unitPrice = false;
}
if(freight){
//System.out.println(new String(ch, start, length));
freight = false;
}
if(quantity){
//System.out.println(new String(ch, start, length));
quantity = false;
}
if(collectCount){
//System.out.println("Amount"+new String(ch, start, length));
collectCount = false;
}
if(unitPrice & freight & quantity){
collectCount = true;
//currentCount = unitPriceCount * quantityCount + freightCount;
}
}
}
ERROR:
Exception in thread "main" java.lang.NumberFormatException: For input string: "UnitPrice"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at DataProcessor2.startElement(DataProcessor2.java:50)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at One.main(One.java:19)
Code und Fehler liefern – JEY
Edited Code und Fehler gegeben – th30d0rab1e
Sie versuchen, das zu analysieren ** String ** '" UnitPrice "' als float 'unitPriceCount = Float.parseFloat ((qualifiedName));' .Sie sollten den Wert analysieren, nicht den Namen. – Berger