Lepszy sposób analizowania xml

Od lat analizuję XML w ten sposób i muszę przyznać, że liczba różnych elementów staje się coraz bardziej nudna i wyczerpująca, oto co mam na myśli, przykładowy 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>

Jest to istotna część (za pomocą saksofonu):

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



    }

}

Zastanawiam się, czy istnieje sposób na pozbycie się tych ohydnych booleanów, które rosną z wieloma elementami. Musi istnieć lepszy sposób na przeanalizowanie tego stosunkowo prostego pliku XML. Po prostu patrząc na linie kodu niezbędne do wykonania tego zadania wygląda brzydko.

Obecnie używam parsera SAX, ale jestem otwarty na wszelkie inne sugestie (inne niż DOM, nie mogę sobie pozwolić na parsery pamięci mam ogromne pliki XML).

questionAnswers(9)

yourAnswerToTheQuestion