[Java, JDOM] XML file lezen

Pagina: 1
Acties:

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Hallo,

Ik ben bezig met een classe om xml files uit te lezen, nu heb ik een probleem met het uitlezen van een xml file.
Ik heb de volgende conde geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    public Stock[] getStocks()
    {
        SAXBuilder parser = new SAXBuilder();
        File bestand = new File("W:/test/xml/stocks.xml");
        //URL test= new URL(url);
        
        if (bestand.canRead()){
            Document doc = parser.build(bestand);
            Element root = doc.getRootElement();
            listChildren(root);  
            return (Stock[]) this.stocks;
        }
    }


Maar nu krijg ik steeds een JDOMExepton op de regel : "Document doc = parser.build(bestand);"

ik kan er maar niet achter komen wat er mis is met mijn code/xml file. De xml file ziet er trouwens als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" ?> 
<stocks>
  <stock>
      <stockname>ahold</stockname> 
      <stockvalue>6,30</stockvalue> 
  </stock>
  <stock>
      <stockname>akzo nobel</stockname> 
      <stockvalue>31,49</stockvalue> 
  </stock>
</stocks>

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Wat is precies de exception die je krijgt?

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Ik krijg de volgende melding:
code:
1
2
3
4
java.lang.Error: Unresolved compilation problems: 
    This method must return a result of type Stock[]
    Unhandled exception type IOException
    Unhandled exception type JDOMException

IK heb de file inmiddels naar d:\stocks.xml veranderd ("d:\\stocks.xml");

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Je return value is Stock[] schijnbaar geef je dit niet terug.

Ik denk dat de fout hier in zit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  public Stock[] getStocks()
    {
        SAXBuilder parser = new SAXBuilder();
        File bestand = new File("W:/test/xml/stocks.xml");
        //URL test= new URL(url);
        
        if (bestand.canRead()){
            Document doc = parser.build(bestand);
            Element root = doc.getRootElement();
            listChildren(root);  
            return (Stock[]) this.stocks;
        }
    }


Als if (bestand.canRead()){ dit nu een false oplevert wat return je dan?

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 15-05 11:05
Uiteraard gaat dit mis, waar set je this.stocks dan?

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
ronaldmathies schreef op maandag 31 januari 2005 @ 17:08:
Als if (bestand.canRead()){ dit nu een false oplevert wat return je dan?
waarschijnlijk niets zo te zien....

stp - PSN ID: stp_4


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ronaldmathies schreef op maandag 31 januari 2005 @ 17:08:
Je return value is Stock[] schijnbaar geef je dit niet terug.

Ik denk dat de fout hier in zit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
  public Stock[] getStocks()
    {
        SAXBuilder parser = new SAXBuilder();
        File bestand = new File("W:/test/xml/stocks.xml");
        //URL test= new URL(url);
        
        if (bestand.canRead()){
            Document doc = parser.build(bestand);
            Element root = doc.getRootElement();
            listChildren(root);  
            return (Stock[]) this.stocks;
        }
    }


Als if (bestand.canRead()){ dit nu een false oplevert wat return je dan?
Dat klopt(gefixed), maar de JDOM(en io) error blijft bestaan..
TukkerTweaker schreef op maandag 31 januari 2005 @ 17:11:
Uiteraard gaat dit mis, waar set je this.stocks dan?
die wordt in de constructor van de klass al geset.

code:
1
2
3
4
5
public Stock_retriever(String source)
{
    this.xml_source = source;
    this.stocks = new Stock[1000];
}

[ Voor 21% gewijzigd door THIJZEL op 31-01-2005 17:16 ]


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Dan kom je weer terug op wat iemand anders al vermelde waar set je this.stocks? En hoe zet je die?

Unhandled exception type IOException
Unhandled exception type JDOMException

Wil zeggen dat je een try{ } catch (..) {} block om je code heen moet zetten die deze exceptions afvangt.

[ Voor 50% gewijzigd door ronaldmathies op 31-01-2005 17:15 ]

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ronaldmathies schreef op maandag 31 januari 2005 @ 17:14:
Dan kom je weer terug op wat iemand anders al vermelde waar set je this.stocks? En hoe zet je die?

Unhandled exception type IOException
Unhandled exception type JDOMException

Wil zeggen dat je een try{ } catch (..) {} block om je code heen moet zetten die deze exceptions afvangt.
Ja ok, maar daarmee vang ik toch aleen af als het misgaat, en dan weet ik toch nog niet waarom het misgaat?

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
En dat is de reden dat het mis gaat, je bent verplicht om een try catch block te plaatsen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   try {

        SAXBuilder parser = new SAXBuilder();
        File bestand = new File("W:/test/xml/stocks.xml");
        //URL test= new URL(url);
        
        if (bestand.canRead()){
            Document doc = parser.build(bestand);
            Element root = doc.getRootElement();
            listChildren(root);  
            return (Stock[]) this.stocks;
        }
   } catch (IOException e) {
      System.err.println (e.toString());
   } catch (JDOMException e) {
      System.err.println (e.toString());
   } finally {
   }


Maar zo weet je ook wat er fout gaat.

[ Voor 9% gewijzigd door ronaldmathies op 31-01-2005 17:20 ]

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ronaldmathies schreef op maandag 31 januari 2005 @ 17:19:
En dat is de reden dat het mis gaat, je bent verplicht om een try catch block te plaatsen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   try {

        SAXBuilder parser = new SAXBuilder();
        File bestand = new File("W:/test/xml/stocks.xml");
        //URL test= new URL(url);
        
        if (bestand.canRead()){
            Document doc = parser.build(bestand);
            Element root = doc.getRootElement();
            listChildren(root);  
            return (Stock[]) this.stocks;
        }
   } catch (IOException e) {
      System.err.println (e.toString());
   } catch (JDOMException e) {
      System.err.println (e.toString());
   } finally {
   }


Maar zo weet je ook wat er fout gaat.
ohh ok, thnx!!
Pagina: 1