Besseren Weg, um xml zu Parsen

Ich habe Parsen von XML, wie dies seit Jahren, und ich muss zugeben, wenn die Anzahl der verschiedenen element wird größer, ich finde es ein bisschen langweilig und anstrengend zu tun, hier ist, was ich meine, Beispiel-dummy-XML:

<?xml version="1.0"?>
<Order>
    <Date>2003/07/04</Date>
    <CustomerId>123</CustomerId>
    <CustomerName>Acme Alpha</CustomerName>
    <Item>
        <ItemId> 987</ItemId>
        <ItemName>Coupler</ItemName>
        <Quantity>5</Quantity>
    </Item>
    <Item>
        <ItemId>654</ItemId>
        <ItemName>Connector</ItemName>
        <Quantity unit="12">3</Quantity>
    </Item>
    <Item>
        <ItemId>579</ItemId>
        <ItemName>Clasp</ItemName>
        <Quantity>1</Quantity>
    </Item>
</Order>

Dies ist ein relevanter Teil (mit sax) :

public class SaxParser extends DefaultHandler {

    boolean isItem = false;
    boolean isOrder = false;
    boolean isDate = false;
    boolean isCustomerId = false;
    private Order order;
    private Item item;

        @Override
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
        if (localName.equalsIgnoreCase("ORDER")) {
            order = new Order();
        }

        if (localName.equalsIgnoreCase("DATE")) {
            isDate = true;
        }

        if (localName.equalsIgnoreCase("CUSTOMERID")) {
            isCustomerId = true;
        }

        if (localName.equalsIgnoreCase("ITEM")) {
            isItem = true;
        }
    }

    public void characters(char ch[], int start, int length) throws SAXException {

        if (isDate){
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
            String value = new String(ch, start, length);
            try {
                order.setDate(formatter.parse(value));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        if(isCustomerId){
            order.setCustomerId(Integer.valueOf(new String(ch, start, length)));
        }

        if (isItem) {
            item = new Item();
            isItem = false;
        }



    }

}

Frage ich mich, gibt es einen Weg, um loszuwerden, diese hässlichen booleans, die wächst mit der Anzahl der Elemente. Es muss einen besseren Weg, um zu analysieren, in diesem relativ einfachen xml. Einfach durch einen Blick in den code-Zeilen notwendig, um diese Aufgabe sieht häßlich aus.

Derzeit bin ich mit SAX-parser, aber ich bin offen für andere Vorschläge (außer DOM, ich kann nicht leisten, in-memory-Parser habe ich riesige XML-Dateien).

  • Sie könnten versuchen, StAX
  • Wenn Sie einen Konzert-Daten-Modell, dass die Erzeugung der XML-würde ich werfen Sie einen Blick auf XStream (xstream.codehaus.org). Es macht einen wirklich netten job der Serialisierung von Daten in xml und zurück.
  • Zum Thema, ich mag beginnend mit XSDs und mithilfe von XmlBeans. Leicht OT, XML-tags sollen die groß-und Kleinschreibung und diesen code bricht, die.
Schreibe einen Kommentar