NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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
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í.

Odpovědět
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.

Odpovědět
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á.

Editováno 3.6.2013 19:09
 
Odpovědět
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 :)

 
Odpovědět
3.6.2013 19:16
Avatar
NotBeginner
Neregistrovaný
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.

 
Odpovědět
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.

 
Odpovědět
19.5.2014 14:34
Avatar
ucenidolazni
Člen
Avatar
Odpovídá 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 ?

 
Odpovědět
19.5.2014 14:39
Avatar
Hartrik
Tvůrce
Avatar
Odpovídá 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.

Editováno 19.5.2014 15:13
 
Odpovědět
19.5.2014 15:12
Avatar
ucenidolazni
Člen
Avatar
Odpovídá 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...

 
Odpovědět
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

 
Odpovědět
17.11.2015 11:14
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.