/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
xml parsing og reference til variable
Fra : Tobias Michaelsem


Dato : 18-06-03 17:28


Hvis jeg har lavet en extension af DefaultHandler til at (SAX) parse en
xml fil, og i løbet af parsningen gerne vil have opdateret et object fra
den klasse der har kaldt parseren - hvordan er det så man gør?

Altså, hvis jeg vil lave noget ala:

Hashtable toupdate = new Hashtable();
handler = new MyHandler(toupdate);
xmlreader.setContentHandler(handler);
xmlreader.parse(xmlfile);
// toupdate er nu blevet ændret...


Dette virker ikke:

public class MyHandler extends DefaultHandler {
private Hashtable tbl;
public MyHandler(Hashtable tbl)
this.tbl = tbl;
}
public void startElement(...) {
...
tbl.put(key, value);
...
}
}


 
 
Mikkel Heisterberg (18-06-2003)
Kommentar
Fra : Mikkel Heisterberg


Dato : 18-06-03 21:47

Det er jo et godt spørgsmål... Generelt med SAX er der jo tale om
manuel parsing af kilde XML-dokumentet så den bedste måde er som regel
af rejse nogle flag, der indikerer hvornår data til et objekt er parset
færdig hvorefter det oprettes. Hvor objketet oprettes / opdateres er som
regel et spørgsmål om smag.

Hvis du laver mange af disse "gennemlæse XML-dokument og
opdatere/konstruere Java objekter"-opgaver kan det nok godt betale sig
at tage et blik på JAXB ("Java API for XML Binding" fra Sun) eller
Castor (OpenSource alternativ - http://www.castor.org).

lekkim

Tobias Michaelsem wrote:
>
> Hvis jeg har lavet en extension af DefaultHandler til at (SAX) parse en
> xml fil, og i løbet af parsningen gerne vil have opdateret et object fra
> den klasse der har kaldt parseren - hvordan er det så man gør?
>
> Altså, hvis jeg vil lave noget ala:
>
> Hashtable toupdate = new Hashtable();
> handler = new MyHandler(toupdate);
> xmlreader.setContentHandler(handler);
> xmlreader.parse(xmlfile);
> // toupdate er nu blevet ændret...
>
>
> Dette virker ikke:
>
> public class MyHandler extends DefaultHandler {
> private Hashtable tbl;
> public MyHandler(Hashtable tbl)
> this.tbl = tbl;
> }
> public void startElement(...) {
> ...
> tbl.put(key, value);
> ...
> }
> }
>


Morten (19-06-2003)
Kommentar
Fra : Morten


Dato : 19-06-03 07:34

Tobias Michaelsem <tobias_at_michaelsen_dot_as@example.com> wrote in message news:<bcq3ti$n5s$1@sunsite.dk>...
> Hvis jeg har lavet en extension af DefaultHandler til at (SAX) parse en
> xml fil, og i løbet af parsningen gerne vil have opdateret et object fra
> den klasse der har kaldt parseren - hvordan er det så man gør?
>
> Altså, hvis jeg vil lave noget ala:
>
> Hashtable toupdate = new Hashtable();
> handler = new MyHandler(toupdate);
> xmlreader.setContentHandler(handler);
> xmlreader.parse(xmlfile);
> // toupdate er nu blevet ændret...
>
>
> Dette virker ikke:
>
> public class MyHandler extends DefaultHandler {
> private Hashtable tbl;
> public MyHandler(Hashtable tbl)
> this.tbl = tbl;
> }
> public void startElement(...) {
> ...
> tbl.put(key, value);
> ...
> }
> }


Hvorfor virker det ikke? Er din startElement metode signatur helt
korrekt?

public void startElement(String uri, String lName,
String qName, Attributes att)
throws SAXException {

..

}

Det burde virke. Du holder reference til den samme hashtabel.

Mvh Morten

Tobias Michaelsem (19-06-2003)
Kommentar
Fra : Tobias Michaelsem


Dato : 19-06-03 12:50

Morten wrote:
> Tobias Michaelsem <tobias_at_michaelsen_dot_as@example.com> wrote in message news:<bcq3ti$n5s$1@sunsite.dk>..
> [...]
>
> Det burde virke. Du holder reference til den samme hashtabel.
>
> Mvh Morten

Det virker også - fejlen lå et andet sted
Nogen gange kan man bare se sig blind på et problem...

-tobias


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste