NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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 – Lekce 7 - Zápis XML souborů SAXem v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
karolko
Člen
Avatar
karolko:22.1.2016 12:19

preco nejde ten kod so zanorenim
xsw = new IndentingXMLStre­amWriter(xof.cre­ateXMLStreamWri­ter(new FileWriter("")));

bez zanorenia sa to tako prehliada a kazdy prehliadac mi vypise, ze dokuemnt je zle sformatovany...
som tak trosku beginner, ale mam snahu :)

 
Odpovědět
22.1.2016 12:19
Avatar
Jan Kašpar
Člen
Avatar
Odpovídá na karolko
Jan Kašpar:11.7.2016 9:28

Změň encoding v nastavení celého svého projektu a pak už nebudeš mít problém se špatným formátováním

Editováno 11.7.2016 9:28
 
Odpovědět
11.7.2016 9:28
Avatar
rosatislav
Člen
Avatar
rosatislav:17.2.2017 19:30

Vidíme, že SAX poznal, že v elementu uzivatel není kromě atributu žádná hodnota a tak tag vyrenderoval jako nepárový.

Jenom pro úplnost, kde přesně vidím, že ten tag byl vytvořen nepárový, když ukázce nad tou větou, je vše párové a i mně se vytvořil dokument, kde je vše párové?

Editováno 17.2.2017 19:31
 
Odpovědět
17.2.2017 19:30
Avatar
Ruda Pivrnec
Člen
Avatar
Ruda Pivrnec:16.2.2019 18:51

Ahoj, použil jsem tento příklad na prográmek pro převod XML s účtenkami na jiné XML pro import do účetního programu. Funguje mi to bezvadně, ale potřeboval bych poradit - s javou dělám poprvé v životě. Když to spustím v NetBeans, je vygenorovaný soubor OK, ale když spustím přímo .jar, tak je v háji čeština. A ještě prosím maličkost - jak zařídit odřádkování a mezery pro přehlednost ve vytvářeném XML? Díky moc.

 
Odpovědět
16.2.2019 18:51
Avatar
Adam Bucher
Člen
Avatar
Adam Bucher:22.8.2019 19:57
finally{
    try{
        if (xsw != null){
                xsw.close();
        }
    }
    catch (Exception e){
            System.err.println("Chyba při uzavírání souboru: " + e.getMessage());
    }
}

Proč dávat do try bloku i testování, zda proměnná neobsahuje hodnotu null - testování bude bezchybné vždy. Potom mi přijde logičtější:

finally{
    if (xsw != null){
        try {
                xsw.close();
        } catch (Exception e) { ... }
    }

Nepravdivá informace o vyrenderování tagu jako nepárového (viz komentář od rosatislav) je v článku stále, i když na ni bylo upozorněno před více než dvěma lety :-(.

Document document = builder.parse(new InputSource(new InputStreamReader(new FileInputStream(soubor))));

Možná tomu dřív tak nebylo, ale lze tento šílený řádek nahradit jednoduchým

Document document = builder.parse(soubor);

a builder už si sám správně document ze souboru vytvoří.

A nakonec, uvedený DateTimeFormatter pro uložení LocalDate podle ukázky nefunguje (řešením je převést jeho argument na LocalDateTime pomocí u.getRegistro­van().atStartOf­Day()) anebo, lépe, změnou patternu při získávání instance DateTimeFormat­teru zápisem metody ofPattern("d'­.'MMMM yyyy")).

 
Odpovědět
22.8.2019 19:57
Avatar
Rozbita Zaluzie:4.6.2020 11:05

Po přidání všech těhle řádků

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new InputStreamReader(new FileInputStream(soubor))));

// Získáme novou instanci transformeru
Transformer xformer = TransformerFactory.newInstance().newTransformer();
// Nastavíme formátování pro XML
xformer.setOutputProperty(OutputKeys.METHOD, "xml");
// Nastavíme odsazení
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
Source source = new DOMSource(document);
Result result = new StreamResult(new File(soubor));
xformer.transform(source, result);

se mi vše rozsvítilo jako vánoční stromeček ale i po přidání všech inportů které mi nabídl NetBeans a vyzkoušení zkrácení document builderu se stále najde pár chyb
nevíte kde by mohl být problém

 
Odpovědět
4.6.2020 11:05
Avatar
Jan Křížek:14.9.2021 16:22

Vůbec nechápu smysl privátní funkce "formatuj", když se stejně nikde nevolá. Vůbec nic to nedělá. Všechno je beze změny ať už to tam je nebo ne.
Budu rád, pokud mi to někdo vysvětlí ať tomu více porozumím.

 
Odpovědět
14.9.2021 16:22
Avatar
Michal Hloušek:7.3.2022 15:51

Zdravím všechny, vypadá to že při volání metody "formatuj()" to vyhodí následující vyjímku "Chyba při formátování souboru: unknown protocol: c" a tudíž ve vašem programu nedojde ke zformátování .xml souboru. Osobně jsem tento problém vyřešil následující změnou v metodě "formatuj()":
Document document = builder.parse("fi­le:///" + soubor);

 
Odpovědět
7.3.2022 15:51
Avatar
Atrament
Člen
Avatar
Odpovídá na Michal Hloušek
Atrament:8.3.2022 1:21

Nemáš v cestě k tomu souboru náhodou mezeru?

 
Odpovědět
8.3.2022 1:21
Avatar
Odpovídá na Atrament
Michal Hloušek:8.3.2022 8:25

To je pravda, mám mezeru v cestě protože v adresáři "Users" mám osobní adresář ve tvaru "Jmeno(mezera)Příj­mení". Vyzkoušel jsem soubor.xml vygenerovat s cestou bez mezery a bez mnou provedené úpravy v metodě "formatuj()" a funguje! 🙂 Pokud to někdo má stejně jako já, dejte si na to POZOR!
Díky za podporu!

Editováno 8.3.2022 8:25
 
Odpovědět
8.3.2022 8:25
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 10 zpráv z 27.