# XML mit JDOM auslesen => langsam?



## tom_tenner (24. Apr 2007)

Hallo zusammen!

Ich möchte gerne SVG (=XML) Dateien auslesen und bearbeiten. Aus diesen Dateien brauche ich nur einen Tag (<path  d="M83.0141..." />), welcher aber fast den kompletten Inhalt ausmacht. In diesem Tag stehen (als Attribut) mal mehr und mal weniger viele Koodinaten (Mischung aus Double's und Chars's) drin.
Ich habe das mit Hilfe von JDOM umgesetzt, aber bei größerem Inhalt (ca. 7000 Zeichen und 8KB Dateigröße) beträgt die Ladezeit mehrere Sekunden (ca. 12 Sek.). Ist das normal beim Unmgang mit XML oder gibt es eine performantere Methode, um an die (Attribut-) Daten aus dem Tag zu kommen?

Hier der Code, mit dem ich die XML Datei einlese:

```
Document doc = new SAXBuilder().build(filename);
```

Wäre super, wenn mir jemand weiter helfen könnte!

Viele Grüße
Tom


----------



## Wildcard (24. Apr 2007)

```
Document doc = new SAXBuilder().build(filename);
```
Und das soll 12 Sekunden bei 8kb dauern?
Das kann fast nicht sein. Bau mal printlns ein um einen groben Überblick zu bekommen wie lange diese Anweisung alleine braucht.


----------



## tom_tenner (24. Apr 2007)

Also die Anweisung dauert ca. 12 Sekunden.
Lad dir mal diese Datei und schau sie dir an: ****
Sie ist zwar nicht groß, aber voll!  :wink:

/edit URL rausgenommen, da Problem gelöst


----------



## Roar (24. Apr 2007)

also ich glaub dir das auch nich 
lädst du die datei vorher vielleicht noch ausm internet runter?
vielleicht versucht der auch die dtd zu laden. sag dem mal der soll nich validieren.


----------



## tom_tenner (24. Apr 2007)

Bin ich denn so unglaubwürdig?  :roll: 

Ich arbeite mit Eclipse und die Datei liegt lokal auf meiner Festplatte (aber nicht im selben Ordner wie das Programm), aber daran kanns doch nicht liegen, oder?



> vielleicht versucht der auch die dtd zu laden. sag dem mal der soll nich validieren.


Hmm, wie mache ich das denn?

Ich poste mal das Programm hierzu:

```
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.io.*;

public class XMLTest1 {

	public static void main(String[] args) {
		String filename = "C:\\Downloads\\test.xml";
		try{
			Document doc = new SAXBuilder().build(filename);
			System.out.println("Endlich geladen...");
			XMLOutputter out = new XMLOutputter(); 
			out.output( doc, System.out );
		} catch (IOException e1) {
			System.out.println("Keine Datei gefunden!");
		} catch(JDOMException e2) {
			System.out.println("JDOM Ausnahme...");
		}
	}
}
```


----------



## Roar (24. Apr 2007)

saxbuilder.setValidating(false);
und falls du xerces benutzt, nehm ich mal an:
saxbuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);


----------



## tom_tenner (25. Apr 2007)

```
saxbuilder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
```
Ich könnte dich knutschen, das wars!   
Super, vielen Dank an euch 2 für die schnelle und tolle Hilfe!


----------



## Wildcard (25. Apr 2007)

Jau... da braucht man sich nicht wundern wenn man erst eine DTD über eine HTTPConnection nachlädt  :wink:


----------

