Was für ein Quatsch von Vorgestern ist das mit DTD?
XML definiert man und das nicht erst seit gestern mit XML-Schema also XSD-Dateien.
Jeder halbwegs anständige XML-Editor kann dir aus dem gegebenen XML eine XSD-Datei generieren, die man dann eben noch leicht anpassen kann oder muss. Aber fast selbsterklärend.
Mit der XSD-Datei generiert man dann Java-Code. Bei einer Javainstallation ist da das tool xjc dabei.
Da kommt dann Klasse Shop mit einer List<Artikel> raus und eine Klasse Artikel mit Name, Preis, etc.
Und mit dem in Java enthaltenen javax.xml.bind.Unmarshaller sind es ein paar Aufrufe die aus einer XML-Datei dann eine Instanz von Shop erzeugt.
und den Preis des zweiten Artikels bekommt man dann über shop.getArtikels().get(1).getPreis(), also ganz normale Java-Objekte.
Das funktioniert und ist auch gut dokumentiert. Das ganze läuft auch unter dem Namen JaxB (Doku, Tutorials etc.).
Probleme treten hier auf, wenn sich im Lauf der Zeit das XML-Format ändert. Also weitere Felder hinzukommen oder entfallen. Wenn das ganze aber recht stabil ist oder gar auf anerkannten XML-Standards basiert, ist das in der Regel kein Problem.
Ansonsten kann "manuelles" Verarbeiten via Sax, Dom oder Json bei im Kern gleichbleibenden Dokumenten eine bessere, Fehlertolerantere Lösung bieten.
Mit Jaxb ist auch der Weg von Java-Objekten hin zu einer XML-Datei via Marshaller möglich.