Avatar
adder
Člen
Avatar
adder:

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
Redaktor
Avatar
Matěj Kripner:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět 25.11.2014 15:40
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
adder
Člen
Avatar
Nahoru Odpovědět  +1 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.