Java und XML(SAX)

Technoblade

Erfahrenes Mitglied
Hi,

arbeite mich gerade für ein kleines Projekt in XML mit Java ein. habe mir dazu jetzt diese kleine Test-XML-Datei geschrieben:

XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<professions
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="./professions.xsd">
    <profession name="Test">
	    <skill id="3" chance="4"/>
	</profession>
</professions>

Das Schema dazu ist folgendes:

XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3c.org/2001/XMLSchema">
    <xsd:element name="professions" type="professionsType" />

	<xsd:complexType name="professionsType">
	    <xsd:sequence>
		    <xsd:element name="profession" type="professionType" />
		</xsd:sequence>´
	</xsd:complexType>

	<xsd:complexType name="professionType">
	    <xsd:sequence>
		    <xsd:element name="skill" type="skillType" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" />
	</xsd:complexType>
	
	<xsd:complexType name="skillType">
		<xsd:attribute name="id" type="xsd:positiveInteger" />
		<xsd:attribute name="chance" type="xsd:positiveInteger" />
	</xsd:complexType>
</xsd:schema>

Mein erstes Ziel war es jetzt die Datei einzulesen und mir erstmal ausgeben zu lassen was für Tags er dabei liest. Dazu hatte ich jetzt folgenden Quellcode:

Java:
try {
    XMLInputFactory factory = XMLInputFactory.newFactory();
    XMLEventReader reader = factory.createXMLEventReader(new FileInputStream(xmlFile));
    while(reader.hasNext()) {
        XMLEvent nextTag = reader.nextTag();
        System.out.println(nextTag.getEventType());            
    }
}
catch(FileNotFoundException fnfex) {
    fnfex.printStackTrace();
}
catch(XMLStreamException xsex) {
    xsex.printStackTrace();
}

Erstmal läuft alles normal durch, ich bekomme 3x hintereinander die Ausgabe für den Start-Tag und 3x die Ausgabe für den End-Tag. Dann erhalte ich allerdings eine XML-StreamExceptzion mit dem Vermerk, dass er End-Document gefunden hat und einen Start, oder End-Tag erwartet hat.
Woran liegt das? Bzw. was ist denn so schlimm daran wenn das Document zuende ist? Mit 3x geöffnet und 3x geschlossen müsste doch eigentlich alles passen.

lg Technoblade

Edit:
Hatte in der zwischenzeit noch einiges geändert, der Stand des Beitrags ist jetzt aber aktuell.
 
Zuletzt bearbeitet von einem Moderator:
Ich vermute, weil ein Event nicht zwingend ein Tag sein muss, d.h. er findet noch ein Space-Event, du fragst ihn dann aber nach den nächstes Tag, welches nicht mehr vorhanden ist. Ich persönlich würde dir eher zum XMLStreamReader raten.
 
Zurück