Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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
Avatar
Kit
Tvůrce
Avatar
Kit:11.5.2013 10:12

Koukám, že ten program máš docela dlouhý. Vše, co začíná xsw. by se mělo nacházet v samostatné třídě, protože s otevíráním výstupních proudů nesouvisí.

Odpovedať
11.5.2013 10:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Kit:11.5.2013 10:29

Představoval bych si tu třídu asi takto:

class WriteXML extends IndentingXMLStreamWriter {

    public WriteXML (XMLStreamWriter writer, List<Uzivatel> uzivatele)
            throws XMLStreamException {
        super(writer);
        writeStartDocument();
        writeStartElement("uzivatele");
        for (Uzivatel u : uzivatele) {
                writeStartElement("uzivatel");
                writeAttribute("vek", Integer.toString(u.getVek()));
                writeEndElement();
        }
        writeEndElement();
        writeEndDocument();
    }
}

a volání:

xsw = new WriteXML(xof.createXMLStreamWriter(new FileWriter("soubor.xml")), uzivatele);

Netestoval jsem to, ale snad v tom nemám moc chyb.

Odpovedať
11.5.2013 10:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:3.6.2013 19:09

Pokud někomu nepůjde program zkompilovat jako mě, můžete zkusit vyměnit

xsw = new IndentingXMLStreamWriter(xof.createXMLStreamWriter(new FileWriter("")));

za

xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileWriter(""));

Navíc takto nevzniká odsazení, které pak jen zabírá místo na disku. (u mě to bylo 0.5 z 3 MB)
Rychlost vypadá stejná.

Editované 3.6.2013 19:09
 
Odpovedať
3.6.2013 19:09
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:3.6.2013 19:16

aha, už vidím že to byl záměr, tak alespoň víte co dělat když kompilátor nebude moci najít tu třídu :)

 
Odpovedať
3.6.2013 19:16
Avatar
NotBeginner
Nevyplnené
Avatar
NotBeginner:6.1.2014 15:11

Pokud to někomu bude dělat problémy jako mě zde :

xsw = new IndentingXMLStreamWriter(xof.createXMLStreamWriter(new FileWriter("")));

pak řešením je v projektu odebrat JRE systémovou knihovnu a opětovně přidat.

 
Odpovedať
6.1.2014 15:11
Avatar
ucenidolazni
Člen
Avatar
ucenidolazni:19.5.2014 14:34

Zdravím všechny :-),
prosím vás chtěl bych se zeptat....pokud ukládám textové záznamy do XML, jak bych měl udělat, aby se každý nový záznam přidal pod již existující a nepřepisoval se ? Možné je to vyřešit že pro každý záznam vytvořím nový XML soubor, ale to by bylo neefektivní. Děkuji všem za odpovědi, už jsem hledal na youtube, google a nemůžu na to přijít :-(. Proto se na vás obracím.
Hezký den.

 
Odpovedať
19.5.2014 14:34
Avatar
ucenidolazni
Člen
Avatar
Odpovedá na ucenidolazni
ucenidolazni:19.5.2014 14:39

Mohlo by být vhodné řešení nejprve zápis provést do .txt a poté vždý XML dokument přepsat daty z .txt ?

 
Odpovedať
19.5.2014 14:39
Avatar
Hartrik
Tvůrce
Avatar
Odpovedá na ucenidolazni
Hartrik:19.5.2014 15:12

Pokud to API opravdu neumožňuje, tak můžeš jednoduše načíst stávající obsah, přidat k němu nový a znovu uložit.

Editované 19.5.2014 15:13
 
Odpovedať
19.5.2014 15:12
Avatar
ucenidolazni
Člen
Avatar
Odpovedá na Hartrik
ucenidolazni:19.5.2014 16:11

Jojo to mě taky došlo, jen mě napadlo jestli není jednodušší způsob :-( No jelikož je to evidence tak budu každý vytvořený záznam ukládat zvlášť jako xml a bude jednodušší pak záznamy mazat...

 
Odpovedať
19.5.2014 16:11
Avatar
Jaroslav Zakouřil:17.11.2015 11:14

Ahoj Davide, přetvořil jsem si Tvůj kód pro svou potřebu a v NetBeans funguje perfektně. Já ale potřebuju, aby fungoval v telefonu pod Androidem. A když jsem ho tam přenesl, tak nelze importovat IndentingXMLStre­amWriter, XMLOutputFactory a XMLStreamWriter a jejich metody použité v kódu. Jde to nějak vyřešit nebo musím pro Android použít jiný zápis do souboru ? A pokud ano, tak jaký ? Díky za odpověď. Jarda Zakouřil

 
Odpovedať
17.11.2015 11:14
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.

Zatiaľ nikto nevložil komentár - buď prvý!