Hallo Gemeinschaft,
ich habe folgendes XML Dokument vor mir liegen :
[XML]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Knoten>
<koordinaten id="0">
<xkoord>111</xkoord>
<ykoord>222</ykoord>
</koordinaten>
<koordinaten id="1">
<xkoord>333</xkoord>
<ykoord>444</ykoord>
</koordinaten>
</Knoten>[/XML]
Erzeugt habe ich dieses damit : http://www.java-forum.org/xml-co/120551-xml-write-problem.html
Ich möchte nach dem Auslesen des XML Dokumentes eine ArrayList<Punkt> kreise erzeugt haben, die dann, wenn ich sie auslese folgenden Inhalt hat:
0(111,222)
1(333,444)
derzeit bekomme ich aber nur :
0(333,444)
mit dem folgenden Code habe ich es nicht geschafft:
1. mache ich mir das mit diesem Code zu schwer???
2. wo liegt mein Denkfehler??
ich habe folgendes XML Dokument vor mir liegen :
[XML]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Knoten>
<koordinaten id="0">
<xkoord>111</xkoord>
<ykoord>222</ykoord>
</koordinaten>
<koordinaten id="1">
<xkoord>333</xkoord>
<ykoord>444</ykoord>
</koordinaten>
</Knoten>[/XML]
Erzeugt habe ich dieses damit : http://www.java-forum.org/xml-co/120551-xml-write-problem.html
Ich möchte nach dem Auslesen des XML Dokumentes eine ArrayList<Punkt> kreise erzeugt haben, die dann, wenn ich sie auslese folgenden Inhalt hat:
0(111,222)
1(333,444)
derzeit bekomme ich aber nur :
0(333,444)
mit dem folgenden Code habe ich es nicht geschafft:
Java:
import java.io.*;
import java.util.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class PunkteXMLRead {
/**
* @param args
*/
public static void main(String[] args) {
try {
XMLReader rd = XMLReaderFactory.createXMLReader();
KoordinatenHandler ch = new KoordinatenHandler();
rd.setContentHandler(ch);
rd.parse("data/meinePunkte.xml");
System.out.println("Es wurden folgende Knoten generiert:");
ArrayList<Punkt> kreise = ch.getVertices();
for (Punkt pkt: kreise) {
System.out.println(pkt);
}
}
catch (SAXException se) {
System.out.println("SAX-Fehler: " + se.getMessage());
}
catch (IOException ioe) {
System.out.println("Datei nicht gefunden");
ioe.printStackTrace();
}
}
}
class KoordinatenHandler implements ContentHandler {
private int xkoord, ykoord; // beinhaltet die zuletzt gelesene x- / y-Koordinate
private int id; // beinhaltet die zuletzt gelesene id
private boolean isXkoord = false; // true g.d.w. aktuelles Element vom Typ xkoord
private boolean isYkoord = false; // true g.d.w. aktuelles Element vom Typ ykoord
// Array mit Knoten, die aus XML-Dokument generiert wurden
private ArrayList<Punkt> kreise;
public ArrayList<Punkt> getVertices() {
return kreise;
}
/**
* Methode, die bei Elementen vom Typ xkoord / ykoord das Attribut x / y mit
* dem Inhalt des Elementes belegt
*/
public void characters(char[] ch, int start, int length) throws SAXException {
String s = (new String(ch, start, length)).trim(); // entfernt führende oder nachfolgende Whitespaces
if (s.length() > 0) {
if (isXkoord) {
xkoord = new Integer(s);
}
else if (isYkoord) {
ykoord = new Integer(s);
}
}
}
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
if (localName.equals("koordinaten")) {
kreise.add(new Punkt(id,xkoord,ykoord));
}
}
/**
* Methode, die in Abhängigkeit vom Elementtyp die Klassenattribute isXkoord, isYkoord oder id belegt
*/
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (localName.equals("xkoord")) { // aktuelles Element vom Typ xkoord
isXkoord = true;
isYkoord = false;
}
else if (localName.equals("ykoord")) { // aktuelles Element vom Typ ykoord
isYkoord = true;
isXkoord = false;
}
else if (localName.equals("koordinaten")) {
isYkoord = false;
isXkoord = false;
kreise = new ArrayList<Punkt>();
}
else {
isYkoord = false;
isXkoord = false;
if (localName.equals("koordinaten")) { // aktuelles Element vom Typ koordinaten
// Wert des Attributs id des Knotens holen
if (atts.getLength() != 1) {
System.out.println("Falsches XML-Format");
throw new RuntimeException("Falsches XML-Format");
}
else {
if (atts.getLocalName(0).equals("id")) {
id = new Integer(atts.getValue(0));
}
else {
System.out.println("Falsches XML-Format: id");
throw new RuntimeException("Falsches XML-Format");
}
}
}
}
}
public void endDocument() throws SAXException {}
public void endPrefixMapping(String arg0) throws SAXException {}
public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException {}
public void processingInstruction(String arg0, String arg1) throws SAXException {}
public void setDocumentLocator(Locator arg0) {}
public void skippedEntity(String arg0) throws SAXException {}
public void startDocument() throws SAXException {}
public void startPrefixMapping(String arg0, String arg1) throws SAXException {}
}
1. mache ich mir das mit diesem Code zu schwer???
2. wo liegt mein Denkfehler??
Zuletzt bearbeitet: