Diskuze: Lekce 7 - Zápis XML souborů SAXem v Javě
Zpět
Komentáře

Člen

Zobrazeno 10 zpráv z 21. Zobrazit vše
Komentáře
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é?
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.
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.getRegistrovan().atStartOfDay()) anebo, lépe, změnou patternu při získávání instance DateTimeFormatteru zápisem metody ofPattern("d'.'MMMM yyyy")).
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
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.
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("file:///" + soubor);
To je pravda, mám mezeru v cestě protože v adresáři "Users" mám osobní
adresář ve tvaru "Jmeno(mezera)Příjmení". 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!
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...
Zobrazeno 10 zpráv z 21. Zobrazit vše