IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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
Atrament
Tvůrce
Avatar
Odpovídá 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...

 
Odpovědět
8.3.2022 8:47
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?

 
Odpovědět
28.8.2023 14:23
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.

Odpovědět
12.9.2023 15:38
Nikdy není pozdě začít.
Avatar
Odpovídá 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?

 
Odpovědět
16.10.2023 12:52
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ý.

 
Odpovědět
16.10.2023 12:55
Avatar
Yveta Kršková:12. února 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.

 
Odpovědět
12. února 19:09
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 6 zpráv z 26.