Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 7. diel - Zápis XML súborov SAXom v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Atrament
Člen
Avatar
Odpovedá na Michal Hloušek
Atrament:8.3.2022 8:47

Asi bude lepší, když ta explicitní specifikace použitého protokolu tam bude, cestám bez mezery to neublíží. Já to tam pak doplním...

Avatar
Sváťa Zemek:28.8.2023 14:23

Algoritmus chápu. To že existují na vytvoření mnohem složitější XML taky chápu.
Ale naprosto nechápu v čem přesně spočívá výhoda téhle obludnosti oproti vytvoření pomocí obyčejného Files.writeString() nebo BufferedWriter.

Path soubor = Path.of(System.getProperty("user.home"), "itnetwork", "soubor.xml");
try {
    Files.createDirectories(soubor.getParent());
    Files.writeString(soubor, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + System.lineSeparator(),
            StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
    Files.writeString(soubor, "<uzivatele>" + System.lineSeparator(), StandardOpenOption.APPEND);
    for (Uzivatel u : uzivatele) {
        Files.writeString(soubor, "\t<uzivatel vek=\"", StandardOpenOption.APPEND);
        Files.writeString(soubor, String.valueOf(u.getVek()) + "\">" + System.lineSeparator(), StandardOpenOption.APPEND);
        Files.writeString(soubor, "\t\t<jmeno>", StandardOpenOption.APPEND);
        Files.writeString(soubor, u.getJmeno(), StandardOpenOption.APPEND);
        Files.writeString(soubor, "</jmeno>" + System.lineSeparator(), StandardOpenOption.APPEND);
        Files.writeString(soubor, "\t\t<registrovan>", StandardOpenOption.APPEND);
        Files.writeString(soubor, Uzivatel.formatData.format(u.getRegistrovan()), StandardOpenOption.APPEND);
        Files.writeString(soubor, "</registrovan>" + System.lineSeparator(), StandardOpenOption.APPEND);
        Files.writeString(soubor, "\t</uzivatel>" + System.lineSeparator(), StandardOpenOption.APPEND);
        }
    Files.writeString(soubor, "</uzivatele>" + System.lineSeparator(), StandardOpenOption.APPEND);
}
catch (IOException chyba) {
    System.out.println(chyba.getMessage());
}

BTW:
Proč je na definici souboru použito Path soubor, když FileWriter umožňuje použít jako parametr File soubor? Ta konverze mi přijde zcela zbytečná a pro začátečníka komplikující.
Z jakého důvodu je použito Paths.get místo Path.of když jediným viditelným výsledkem je natáhnutí další knihovny?

Avatar
Michal Bažant:12.9.2023 15:38

Poměrně dost složité a upřímně trochu málo vysvětlené, co slouží k čemu, zejména tedy u toho formátování toho XML.
Není vůbec vysvětlené, co je DocumentBuilder­Factory, DocumentBuilder, Transformer apod.
Vše jsem si musel dohledat.

Odpovedať
Nikdy není pozdě začít.
Avatar
Odpovedá na Jan Křížek
Ivana Učňová:16.10.2023 12:52

Psal to tu Jan Křížek před dvěma lety. Soubor XML se správně naformátuje i bez metody formatuj()

private static void formatuj(String soubor) throws IOException, ParserConfigurationException, TransformerException, SAXException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("file:///" + soubor);

        Transformer xformer = TransformerFactory.newInstance().newTransformer();
        xformer.setOutputProperty(OutputKeys.METHOD, "xml");
        xformer.setOutputProperty(OutputKeys.INDENT, "yes");
        Source source = new DOMSource(document);
        Result result = new StreamResult(new File(soubor));
        xformer.transform(source, result);
    }

Čím to je? Nějaká aktualizace Javy?

Avatar
Ivana Učňová:16.10.2023 12:55

Omluva autorovi. Dělá to Firefox. Pokud ten soubor otevřete v Poznámkovém bloku nebo Notepadu, není formátovaný.

Avatar
Yveta Kršková:12.2.2024 19:09

Celkem náročný tenhle SAX koukám. Zatím nejsrozumitelnější mi přišlo zpracování prostých dat z programu přes .txt.

Můj WordPad má problémy se všemy dostupnými formáty písma, což je prý normální, wordpad není stavěný na xml, poznámkový blok je dobrý, ale formátování mi nezobrazil. Prohlížeč naproti tomu zobrazuje i bez zformátování stromovou strukturu.

Zapisuju si lekce do netbeansu a rovnou je testuju (bez kompilace, použito jako sešit, kompiluju jen vlastní prográmky), zde jsem si napsala příkazy do metod pro ukládání do vedlejší třídy a tak jak jsou napsány fungují dobře.

Už jsem pracovala s vlastními texty převedenými do .epub, tady ale vidím, jak by mohl fungovat ten program, se kterým jsem text v .epub zpracovávala.

Odpovedať
:D :D :D
Avatar
Luboš Rendl
Člen
Avatar
Luboš Rendl:14. januára 16:55

Asi by vubec neuskodilo se rozepsat proč a co nastavujeme, k čemu to slouží atd :D, jinak je to pro pochopení dohledávat

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 7 správy z 27.