# XML Datei auslesen / Validierung



## nimo (12. Mrz 2007)

Hallo Zusammen

Ich mache zum ersten Mal etwas mit XML und stehe ein bisschen im Schilf herum...Zwar habe ich schon viel darüber gelesen, aber irgendwie bin ich noch am Anfang.

message.xml:

```
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="urn:nonstandard:test"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:nonstandard:test 
     file:./message.xsd">
	<testcases>
		<testcase>
			<login nummer^1="11111" nummer2="11111" nummer3="1111"/>
		</testcase>
	</testcases>
</test>
```

message.xsd:


```
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified"
            xmlns="urn:nonstandard:test" 
            targetNamespace="urn:nonstandard:test">
	
    <xsd:element name="test" type="Test" />
    <xsd:complexType name="Test">
        <xsd:all>
            <xsd:element name="testcases" type="Testcases" minOccurs="1"/>
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="Testcases">
        <xsd:all>
        <xsd:element name="testcase" type="Testcase" minOccurs="1"/>
		</xsd:all>
	</xsd:complexType>		
		
	<xsd:complexType name="Testcase">
		<xsd:sequence>
			<xsd:element name="login" type="Login" />	
		</xsd:sequence>		
	</xsd:complexType>
	
	<xsd:complexType name="Login">
		<xsd:attribute type="xsd:long" use="required" name="nummer1"/>
		<xsd:attribute type="xsd:long" use="required" name="nummer2"/>
		<xsd:attribute type="xsd:long" use="required" name="nummer3"/>
	</xsd:complexType>
</xsd:schema>
```

Nun habe ich mehrere Fragen:

1. Stimmt das in etwa vom XML her? Also mit dem XSD(wenn ich das richtig  verstanden habe ><) kann ich doch dann Validierungen bestimmen - also damit z.b meine nummer1 immer da stehen muss, ansonsten gibt es einen Fehler

2. Nun will ich mit Java das XML auslesen, also damit ich Zugriff auf die Attribute habe, wie mache ich das? Codebeispiel wäre vielleicht angebracht, oder hat jemand eine gute Seite mit einem Beispiel?

3. Wie funktioniert das mit diesem Validieren. Ich will ja einen Fehler, wenn z.B die Nummer1 nicht gefüllt ist oder fehlt. Wann kommt dieser Fehler, passiert das dann beim laden des XMLs? Oder wie funktioniert das?

Gruss und danke fuer die Hilfe.
nimo


----------



## Azubi (13. Mrz 2007)

Für XML ist die JDOM Library ganz gut:
http://www.jdom.org/

Beispiele sind soweit ich weiß beim download dabei 
Für alles andere JavaDoc von jdom.

Viel Erfolg


----------



## nimo (14. Mrz 2007)

Das mit dem Auslesen versuche ich einmal. Jedoch habe ich immer noch das Problem mit dem Validieren. Ich habe dafür einen XML Editor für Eclipse. Dazu diese 2 oben erwaehnten Files. Nun will ich, dass ich, wenn ich Validierung wähle, eigentlich einen Fehler bekomme, wenn im XML ein Feld fehlt. Sollte das nicht funktionieren? Oder habe ich einen Fehler in meinem XSD?


----------



## nimo (16. Mrz 2007)

Ich habe es hinbekommen. D.h wenn ich das Schema mit dem XML validiere(online oder mit xml buddy fuer eclipse) gibt es die Fehler aus. Jetzt lese ich das gesamte XML in Java ein und lese die Attribute aus. Wenn die Struktur im XML falsch ist, wird ein Fehler ausgegeben. Wenn jedoch ein Attribut falsch benannt ist oder den falschen Datentyp enthaelt, wird kein Fehler ausgegeben. Wie kann ich das steuern? Geht das überhaupt?


```
try {

			Document doc = new SAXBuilder().build(filename);
			doc.setProperty(
					  "http://apache.org/xml/properties/schema/external-schemaLocation",
					  "http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " " +
					  "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd"); 
	        SAXParserFactory factory = SAXParserFactory.newInstance();
	        factory.setValidating(true);
	        factory.setNamespaceAware(true);

	        // XML auslesen //
		}

		catch (IOException e) {
			LOG.error("Fehler beim XML auslesen: " + e);
		} catch (JDOMException jdome) {
			jdome.printStackTrace();
			LOG.error("Fehler: " + jdome);
		}
```

Was könnte fehlen, wie muss ich das machen?


----------



## Gast (26. Mrz 2007)

Die Frage ist immer noch offen, hat keiner eine Idee oder ein Tutorial, bin schon lange auf der Suche aber finde nichts geeignetes.


----------

