[Java] JDOM element.getChildren problemen

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben nu bezig om een XML bestand weer terug in het geheugen te krijgen. Ik heb een simpel XML bestand gemaakt maar ik heb problemen bij de getChildren functie.
code:
1
2
3
4
5
6
7
8
Element multiDatabaseElement = doc.getRootElement();

Element databaseListElement = multiDatabaseElement.getChild("databaseList");

List databaseElementList = databaseListElement.getChildren("database");

//en nu probleem
Element databaseElement = (Element)databaseElementList.get(0);

Maar ik krijg als ik de elementen uit de databaseElementList een class cast exception (hij treft een String aan). Ik vind dit een beetje vreemd omdat in de docs toch heel duidelijk dat alle elementen van het type Element zijn :)

Dit is mijn XML bestand.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>

<multiDatabase>MultiDatabase
  <databaseList>
    <database>
    <tableList>
      <table>contact</table>
      <table>customer</table>
      <table>department</table>
      <table>employee</table>
      <table>fin_code</table>
     </tableList>
    </database>
  </databaseList>
</multiDatabase>

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik gooi hem nog weer even omhoog :z

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
En het staat niet in de docs :?

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
't Staat inderdaad in de documentatie dat er Elementen in zitten. Wat krijg je als je databaseElementList.get(0).toString() doet?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op maandag 03 december 2001 20:27 schreef JapJap het volgende:
't Staat inderdaad in de documentatie dat er Elementen in zitten. Wat krijg je als je databaseElementList.get(0).toString() doet?
sommige elementen zijn spaties en er zitten een aantal vage strings tussen. Heb ook al een System.out.println(databaseElementList.get(n).class) gedaan en dan is het een String. Ik ben geen groentje maar ik snap hier dus ook niets van. XML werkt trouwens wel aardig en zeker in combinatie met een leuke XML editor.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Hum. Ik gebruik meestal gewoon SAX, maar kijk es in dat artikel over Java in XML op http://developer.java.sun.com. Daar staat ook iets in over JDom en hoe je die moet gebruiken. Verder : Heb je de laatste versie ?? Er is geloof ik net een nieuwe, altijd ff updaten :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op maandag 03 december 2001 20:35 schreef MisterData het volgende:
Hum. Ik gebruik meestal gewoon SAX, maar kijk es in dat artikel over Java in XML op http://developer.java.sun.com. Daar staat ook iets in over JDom en hoe je die moet gebruiken. Verder : Heb je de laatste versie ?? Er is geloof ik net een nieuwe, altijd ff updaten :)
Jep versie Beta 7 geloof ik (vorige week opgehaald). Ik ben aan JDom begonnen omdat ik nog een enorme newbie ben op het gebied van XML en dit leek me het makkelijkste.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Valt best mee, SAX is ook makkelijk en zorgt voor "schonere" code. Lees je eerdere topic over starten met XML in Java nog maar es door. Verder moet je echt dat artikel lezen, ik vond het een hele goede inleiding en snap het grootste gedeelte er nu wel van. Ik zal ff de link opzoeken naar dat stukkie tekst (30 pagina's) en het hier posten :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ben al blij dat ik me met JDom red :) alleen dit probleem is vervelend..

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Deze heb ik al een keer snel doorgelezen, maar in ieder geval bedankt voor de moeite :) Ik vond de opzet van JDom juist zo aardig (als het werkt) met die elementen en kinderen. Makkelijk te doorzien.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Alarmnummer:
Ik ben aan JDom begonnen omdat ik nog een enorme newbie ben op het gebied van XML en dit leek me het makkelijkste.
Ik vind JDom een stuk gebruiksvriendelijker dan bijv. SAX en zou me er gewoon bij houden.

Ben even in de code gedoken, en 't zouden toch echt elementen moeten zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public List getChildren(String name, Namespace ns) {
      PartialList children = new PartialList(getChildren(), this);

      if (content != null) {
        String uri = ns.getURI();
        Iterator i = content.iterator();
        while (i.hasNext()) {
            Object obj = i.next();
            if (obj instanceof Element) {
              Element element = (Element)obj;
              if ((element.getNamespaceURI().equals(uri)) &&
                (element.getName().equals(name))) {
                children.addPartial(element);
              }
            }
        }
      }

      return children;
    }

Er worden toch echt alleen elementen aan de lijst toegevoegd. :?

edit:

Ook in GetChildren(), PartialList extends LinkedList, addPartial(o) is super.add(o)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Jah, JDOM is ook wel erg gebruiksvriendelijk, en ik moet zeggen dat er zat ondersteuning voor XML is in Java :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik heb van dat databaseList element ook gecontroleerd wat zijn inhoud was (weet commando niet uit mijn hoofd) en hij laat ook keurig "databaseList" zien, dus ik zit wel op het goeie element. Oja.. in dit XML voorbeeld zit 1 database, terwijl de lengte van die getChildren("database") 5 is. Ook vreemd dus.

ps
heb ook gecontroleerd op gekke tekens in XML bestand, maar die staan er niet in.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
ok.. we gaan het nog gekker maken:
code:
1
2
3
4
5
6
7
8
9
List databaseElementList = root.getChildren("database");
System.out.println("children met voorwaarden:"+databaseElementList);    
System.out.println("list size = "+databaseElementList.size());       
Iterator i = databaseElementList.iterator();        
for(int k=0;k<databaseElementList.size();k++)        
{            
   Object c = databaseElementList.get(k);
   System.out.println("class:"+c.getClass());        
}

en dit is mijn uitvoer:
children met voorwaarden:[, org.jdom.Element@dcb6b4, , org.jdom.Element@dcb6b4, org.jdom.Element@dcb6b4]
list size = 5

class:class java.lang.String
class:class org.jdom.Element
class:class java.lang.String
class:class org.jdom.Element
class:class org.jdom.Element

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik zie dat ik een enorme fout heb gemaakt, ik heb schijnbaar de beta3 gedownload ipv de beta7. Dus }:O

Verwijderd

Ik ben zelf ook vrij newbie op het gebied van XML, maar ik heb het nu inmiddels al wel op 2 manieren draaiend. (uiteraard in Java)

Ik heb een versie die werkt met gewoon Dom.
En ik heb een versie die werkt met Dom van Tiny XML. (Tiny XML word eigenlijk alleen voor Heldhelds gebruikt)

Verder heb ik ook nog wat voorbeelden liggen.

Als je wil kan ik de java files en de XML files waar die proggies op gebaseerd zijn wel ff toesturen. (copy paste hier is een beetje heel erg veel)

Laat maar ff weten of je geinsteresseerd ben.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben geinteresseerd :) want ik zie in de tuts wel kleine voorbeeldjes staan, maar die zijn niet bruikbaar om grote objecten naar XML te converteren (en weer in te lezen).

Verwijderd

Email adres wat in je profile staat klopt??
Of wil je het ergens anders hebben??
Op dinsdag 04 december 2001 13:07 schreef Alarmnummer het volgende:
Ik ben geinteresseerd :) want ik zie in de tuts wel kleine voorbeeldjes staan, maar die zijn niet bruikbaar om grote objecten naar XML te converteren (en weer in te lezen).

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Mijn email adres is alarmnummer@hotmail.com :)

Verwijderd

Ik heb je nu een mailtje gestuurd. Afzender = jantje126@hotmail.com

Ik heb ze naar 3 adressen gestuurd. (1e gevonden via Profiles, 2e via je website, 3e gaf je me net)
Op dinsdag 04 december 2001 14:46 schreef Alarmnummer het volgende:
Mijn email adres is alarmnummer@hotmail.com :)

  • Tomatrix
  • Registratie: Juni 1999
  • Laatst online: 27-02-2025
En wat krijg je eruit wanneer je alle returns/spaties/tabs uit je xml file verwijderd (er dus gewoon 1 lange string van maakt)?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
de fout is gelukkig al opgelost. Ik heb per ongeluk beta3 jars gebruikt, en sinds ik beta7 jars gebruik werkt alles goed.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Mooi dat het gefixed is. Ik denk dat het probleem met Mixed-content te maken had. Kennelijk ging hij in de oudere versie nog vanuit dat deze string content niet genegeerd kon worden. Daardoor komen er text knopen in je DOM.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MisterData: Valt best mee, SAX is ook makkelijk en zorgt voor "schonere" code.
Had je mijn dispatcher met reflectie voor SAX al weleens gezien? Daarmee krijg je pas echt leuke code ;) . Ik heb het weleens aan iemand laten zien, maar weet niet meer wie dat was :o . Als je interesse hebt kan ik het wel ff neer zetten.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1