Java SAX Parser

Hier kann über alles diskutiert werden, wirklich alles. Betonung liegt auf "diskutiert", das ist also kein Freischein zum Spammen.
(Beitragszähler deaktiviert)
Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Java SAX Parser

Beitrag von Blue.Shark » 7. Dez 2013, 20:00

Meine Aufgabe ist es, bestimmt Elemente mit bestimmten Attibuten aus einer XML-Datei mit Java auszulesen. Ich habe dann etwas im Internet geschaut und mich für den SAX Parser entschieden, da er scheinbar schneller ist und nicht das gesamte XML-Dokument lesen muss. Jetzt habe ich mich mit diversen Internet seiten etwas eingearbeitet und stelle fest, dass bei der Funktion

Code: Alles auswählen

public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {...}
trotzdem ALLE Elemente gelesen werden.

Ich bin am verzweifeln, ich finde nichts im Internet wie ich einfach nur einen Teil einer XML-Datei auslesen kann.

Also ich möchte z.b. bei folgender XML-Datei

Code: Alles auswählen

<test x="1">hello</test>
<test x="1234">hallo</test>
<test>halloooo</test>
<test2 x="1234">hi</test2>
nur den Inhalt des Elements "test" mit dem Attribut "1234" auslesen (also "hallo").

Vielleicht gibt es ja unter euch welche die sich mit diesem Thema schon beschäfiigt haben und mir helfen können.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

bwoebi
Administrator
Beiträge: 3290
Registriert: 28. Apr 2008, 19:13

Re: Java SAX Parser

Beitrag von bwoebi » 7. Dez 2013, 23:08

@RageQuit: http://stackoverflow.com/a/1732454/2153758 So viel dazu.

@Blue: Dein Parser, egal welchen du nutzt, muss ja zuerst mal das XML parsen um herauszufinden wo das entsprechende Element ist. Selbst wenn du Regex nutzen würdest, muss dein Regex noch immer zuerst den String lesen zum matchen. (Klar, es wird etwas billiger wenn das gesuchte Muster am Anfang zu suchen ist…)
Um einen Parser kommst du da nicht herum wenn es einigermaßen dynamisch sein soll.
Bogs sind meine Spezialität - Signaturen sind eigentlich doch überflüssig...

bwoebi
Administrator
Beiträge: 3290
Registriert: 28. Apr 2008, 19:13

Re: Java SAX Parser

Beitrag von bwoebi » 7. Dez 2013, 23:47

Ja, auf XPath oder ähnliches kommt es wohl raus.

In der Regel kannst du aber davon ausgehen dass Beispiele zu sehr vereinfacht sind.

Unter anderem kann das XML auch so aussehen:

Code: Alles auswählen

<test value="a="b="c">text</test><test a="b=">text2</test>
Und naja such mal nach Attribut a gleich "b="… Regex failt hier in der Regel einfach mal… es matcht das erste Tag statt des Zweiten^^.
Bogs sind meine Spezialität - Signaturen sind eigentlich doch überflüssig...

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 8. Dez 2013, 12:41

RageQuit hat geschrieben:Wie gesagt, solange wir nicht den genauen Aufbau kennen, ist es sinnlos darüber zu philosophieren ;) Warten wir erst mal ab, was der Hai dazu sagt.
Der Aufbau ist wie ich oben in meinem ersten Post geschrieben hab, also es sind sehr viele Tags, die maximal 2 Attribute hben, wobei die Attribute einfache Zahlen sind.
Die XML-Datei ist ewig lang, ca. 400 Zeilen, deshalb ist es wichtig, dass ich nicht alles einlesen muss, sondern nur das, was ich wirklich brauche.

Ich bin totaler Anfänger in Java, deswegen wäre so ein fertiger Parser, wo ich nur sagen muss was er mir holen muss, sehr toll.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 8. Dez 2013, 23:23

Ok, danke. Ich werde mich da mal einlesen.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 9. Dez 2013, 19:00

Ich hab noch eine kurze Frage, wäre nett, wenn die mir jemand beantworten könnte:
Ich habe eine Klasse A:

Code: Alles auswählen

public class A{
	private String [] var= new String[10];
}
und eine Klasse B:

Code: Alles auswählen

public class B{
	public static void main(String[] args) {
        int x = 10;
   }
}
Wie erreiche ich, dass das Array var der Klasse A nicht fix auf 10 ausgelegt wird, sondern auf den Wert x von der Klasse B?

Oder geht das garnicht?
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

bwoebi
Administrator
Beiträge: 3290
Registriert: 28. Apr 2008, 19:13

Re: Java SAX Parser

Beitrag von bwoebi » 9. Dez 2013, 19:08

Du initialisierst deine Klassenvariable var nicht automatisch, sondern im Konstruktor:

Code: Alles auswählen

public class A {
    private String[] var;
    A(int strSize) {
        this.var = new String[strSize];
    }
}

public class B{
    public static void main(String[] args) {
        int x = 10;
        /* zuweisen und so… */ new A(x);
    }
}
Bogs sind meine Spezialität - Signaturen sind eigentlich doch überflüssig...

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 9. Dez 2013, 19:30

Ok perfekt, danke bwoebi!
Vielleicht noch eine Frage: Wenn ich ein Klassenarray test von der Klasse A mit 100 Elementen anlege, also:

Code: Alles auswählen

A [] test = new A [100];
test[0].setX(2);
kommt ein Fehler, d.h. das geht irgendwie nicht. Gibts da ne andere Art?
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Benutzeravatar
-Mafiosi-
Wächter des Vulkans
Beiträge: 305
Registriert: 16. Mär 2006, 21:25

Re: Java SAX Parser

Beitrag von -Mafiosi- » 9. Dez 2013, 19:49

Bild


Habt ihr schonmal bemerkt, dass zwischen A und F 2 tasten sind und zwischen F und K 3? 23!
Leute, die afk sind arbeiten für die illuminaten!

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 9. Dez 2013, 19:56

RageQuit hat geschrieben:Was soll das setX bitte bewirken? Oder anders: Was möchtest du erreichen? Ich _vermute_, du möchtest an der Stelle 0 im Array den Wert 2 setzen. Das geht so:

test[0] = 2;

Btw, das ist die beste Fehlerbeschreibung, die es gibt. "Es kommt ein Fehler."
Keine weiteren Fragen.
Nein, so meinte ich das nicht. Mit dem ersten Befehl möchte ich 100 Objekte der Klasse A anlegen. Dann will ich beim Objekt 0 den wert X auf 2 setzen.

Naja der Fehler ist nur dass eine Exception (java.lang.NullPointerException) geworfen wird.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 9. Dez 2013, 20:18

Aber ich habe doch das Objekt mit "new A" erzeugt.

Ich brauche 100 Objekte von Klasse A. Deshalb will ich anstatt dem hier:

Code: Alles auswählen

A test1 = new A;
A test2 = new A;
A test3 = new A;
A test4 = new A;
A test5 = new A;
[...]
Das hier machen, also ein Klassen-array:

Code: Alles auswählen

A [] test = new A [100];
test[0].setX(2);
Aber das klappt nicht, obwohl test[0] ein Objekt der Klasse A ist. :(


PS: Bisher mit C und C++. Ich habe bisher immer alles Nicht-Objektoroentiert programmiert, deshalb tuh ich mich da grad etwas schwer.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Rober
Gelbbart-Yeti
Beiträge: 2196
Registriert: 21. Nov 2008, 16:40
Kontaktdaten:

Re: Java SAX Parser

Beitrag von Rober » 9. Dez 2013, 20:28

RageQuit hat geschrieben:Ok, also lies dir mal das durch, was dir der mafiosi da geschickt hat.
http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Array.htm hat geschrieben:Bei der Deklaration eines Arrays wird der eigentliche Container erzeugt. Das bedeutet, dass das Array zunächst exakt in seiner Größe und Typ bestimmt wird.
Hast du dir Seite überhaupt angeguckt? Du hast am Anfang nur nen "Container"´, in den 100 A-Elemente reinpassen.
mfG Rober


_________________
destruktion ist konstruktion

bwoebi
Administrator
Beiträge: 3290
Registriert: 28. Apr 2008, 19:13

Re: Java SAX Parser

Beitrag von bwoebi » 9. Dez 2013, 20:30

Du erzeugst ein ein Array mit Platz für hundert Objekte der Klasse A und keine hundert Objekte der Klasse A.

eine kleine for Schleife bis hundert brauch es nach der Initialisation des Arrays auch noch um die einzelnen Objekte zu kreieren.

Code: Alles auswählen

A[] test = new A [100];
int i;
for (i = 0; i < 100; i++) test[i] = new A;

/* Und JETZT kannst du die Elemente des Arrays benutzen */
test[0].setX(2);
(Hast du C++ wirklich ohne Objekte genutzt? aah!?)
Zuletzt geändert von bwoebi am 9. Dez 2013, 20:32, insgesamt 1-mal geändert.
Bogs sind meine Spezialität - Signaturen sind eigentlich doch überflüssig...

Benutzeravatar
-Mafiosi-
Wächter des Vulkans
Beiträge: 305
Registriert: 16. Mär 2006, 21:25

Re: Java SAX Parser

Beitrag von -Mafiosi- » 9. Dez 2013, 20:30

Hast du meinen Link ignoriert?

Statt deine Zeit zu verweden, hier immer die gleiche Frage zu stellen, die dort ganz genau beantwortet wird, aber ich kopier dir nochmal hier rein, was dort steht.
public class MyClass
{
public static void main(String[] args)
{
int[] array = new int[2]; // Array anlegen

array[0] = 10; // Wet zuweisen
array[1] = 20;
}
}
(hier speiziell für int-werte, aber einfach analog dazu)
Bild


Habt ihr schonmal bemerkt, dass zwischen A und F 2 tasten sind und zwischen F und K 3? 23!
Leute, die afk sind arbeiten für die illuminaten!

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2860
Registriert: 5. Okt 2008, 21:27

Re: Java SAX Parser

Beitrag von Blue.Shark » 9. Dez 2013, 20:42

Nein, hab ihn nichz ignoriert. Die Seite kannte ich davor schon. Das löst aber immernoch nicht mein Problem. Denn wenn ich dein Beispiel als Klasse ersetze, hätte ich ja bei der Zuweisung
Objekt[0] = 10.

Man kann einem Objekt keine Zahl zuweisen, sondern nur zu den Atrributen des Objekts.
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste