Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Problém s načtení XML

Aktivity
Avatar
adder
Člen
Avatar
adder:25.11.2014 9:58

ahojte, mám menší problém s načtením a to takovej, že u koní, trenéru a stají se mi nechce načíst getAttributeVa­lue(0) jako nazev. Při výpisu mi to vypíše počáteční hodnotu null. U pole start to v pohodě vypíše. Vím, že chyba je někde v tom načtení názvu, jelikož jsem zkoušel zadat konkrétní název a fungovalo to.

XML dokument:

<?xml version="1.0" ?>
<karty>
 <start nazev="Start">
 </start>
 <kun nazev="Fantome">
          <porizovaciCena>1200</porizovaciCena>
          <nakladyNaDostih>1000</nakladyNaDostih>
          <prohlidkaStaje>40</prohlidkaStaje>
          <ziskZDostihu>200,600,1800,3200,5000</ziskZDostihu>
 </kun>
 <karta nazev="Finance">
 </karta>
 <kun nazev="Gavora">
          <porizovaciCena>1200</porizovaciCena>
          <nakladyNaDostih>1000</nakladyNaDostih>
          <prohlidkaStaje>40</prohlidkaStaje>
          <ziskZDostihu>200,600,1800,3200,5000</ziskZDostihu>
 </kun>
 <start nazev="Klinika">
 </start>
 <trener nazev="Trener 1">
          <porizovaciCena>4000</porizovaciCena>
          <prohlidkaStaje>1000</prohlidkaStaje>
 </trener>

Kód pro načtení XML dokumentu:

private void inicializaceHerniDeska() //
       {
               XMLInputFactory factory = XMLInputFactory.newInstance();
               XMLStreamReader xsr = null;
               try {
                       xsr = factory.createXMLStreamReader(new FileReader("init.xml"));

                       String element = null;
                       String nazev = null;
                       int porizovaciCena = 0;
                       int nakladyNaDostih = 0;
                       int prohlidkaStaje = 0;
                       int[] ziskZDostihu = new int[5];

                       while(xsr.hasNext())
                       {
                               if(xsr.getEventType() == XMLStreamConstants.START_ELEMENT) // počátek objektu
                               {
                                       element = xsr.getName().getLocalPart(); // název elementu, který zpracovávám
                                       nazev = xsr.getAttributeValue(0);
                               }
                               else if (xsr.getEventType() == XMLStreamConstants.CHARACTERS) // jednotlivé položky objektu
                               {
                                       switch(element){
                                               case "porizovaciCena":
                                                       porizovaciCena = Integer.parseInt(xsr.getText());
                                                       break;
                                               case "nakladyNaDostih":
                                                       nakladyNaDostih = Integer.parseInt(xsr.getText());
                                                       break;
                                               case "prohlidkaStaje":
                                                       prohlidkaStaje = Integer.parseInt(xsr.getText());
                                                       break;
                                               case "ziskZDostihu":
                                                       String pom = xsr.getText();
                                                       String[] pom2 = pom.split(",");
                                                       for(int j = 0; j < pom2.length; j++)
                                                               ziskZDostihu[j] = Integer.parseInt(pom2[j]);
                                                       break;
                                       }
                                       element = ""; // vyprázdnění elementu
                               }
                               else if ((xsr.getEventType() == XMLStreamConstants.END_ELEMENT)) // konec objektu
                               {
                                       switch(xsr.getName().getLocalPart()){
                                               case "start":
                                                       herniDeska.setPole(new HerniPoleStart(nazev));
                                                       break;
                                               case "kun": // někde tady je zakopanejj pes
                                                       herniDeska.setPole(new HerniPoleKone(new Kun(nazev, porizovaciCena, nakladyNaDostih, prohlidkaStaje, ziskZDostihu)));
                                                       break;
                                               case "karta":
                                                       herniDeska.setPole(new HerniPoleStart(nazev));
                                                       break;
                                               case "trener":
                                                       herniDeska.setPole(new HerniPoleTrenera(new Trener(nazev, porizovaciCena, prohlidkaStaje)));
                                                       break;
                                               case "stajeAPreprava":
                                                       herniDeska.setPole(new HerniPoleStajePreprava(new StajePreprava(nazev, porizovaciCena, prohlidkaStaje)));
                                                       break;
                                       }
                               }
                               xsr.next();
                       }
               } catch (Exception e){
                       System.err.println(e.getMessage() + " nepodarilo se soubor otevrit"); // vytvoreni vyjimky
               }
               finally
               {
                       try {
                               xsr.close();
                       } catch (Exception  e){
                               System.err.println(e.getMessage()  + " nepoda5ilo se soubor zavrit");
                       }
               }
       }
Editováno 25.11.2014 9:59
Odpovědět
25.11.2014 9:58
I’m going to lay this brick as perfectly as a brick can be laid.
Avatar
Matěj Kripner
Tvůrce
Avatar
Matěj Kripner:25.11.2014 15:40

Jen jsem to zběžně prolítl, ale je možné, že sice načteš název koně, ale hned na začátku dalšího(vnořeného) elementu ho přemažeš na null. Myslím, že by se to dalo vyřešit takto:

...
if(xsr.getEventType() == XMLStreamConstants.START_ELEMENT) {
    element = xsr.getName().getLocalPart();
    String tmp = xsr.getAttributeValue(0);
    if(tmp != null)
        nazev = tmp;
} else if ...
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
25.11.2014 15:40
Avatar
adder
Člen
Avatar
Odpovídá na Matěj Kripner
adder:25.11.2014 18:48

jo, jede to díky! :)

Nahoru Odpovědět
25.11.2014 18:48
I’m going to lay this brick as perfectly as a brick can be laid.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.