|
||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
Programujeme s XML (5.) - DOM v Javě IIMinule jsme si zopakovali načítání a ukládání dokumentů. Dnes se tedy podíváme, jak náš dokument propojíme s tabulkou.
Pokud chceme v komponentě
Implementaci prvních tří metod a metody public Object getValueAt(int row, int col) { Element it = ((Element)doc.getDocumentElement().getElementsByTagName("person").item(row)); if (it==null) return null; Element el = (Element)it.getElementsByTagName(tags[col]).item(0); if (el==null) return null; Text text = (Text)el.getFirstChild(); if (text==null) return null; return text.getData(); }
Nejprve z kořenového elementu dokumentu vybereme všechny elementy s názvem public void setValueAt(Object value, int row, int col) { Element it = ((Element)doc.getDocumentElement().getElementsByTagName("person").item(row)); if (it==null) return; Element el = (Element)it.getElementsByTagName(tags[col]).item(0); if (el==null) return; Text newText = doc.createTextNode(value.toString()); while (el.getFirstChild()!=null){ el.removeChild(el.getFirstChild()); } el.appendChild(newText); } Metoda pro změnu obsahu buňky je nápadně podobná předchozí, středem je též nalezení odpovídajícího elementu, se kterým budeme manipulovat, tentokrát ovšem data nečteme, ale přepisujeme. Nejprve si vytvoříme nový textový uzel reprezentující novou hodnotu buňky (Není nejmenší důvod, proč toto dělat jako první krok, ale zdrojový kód přecejenom takto vypadá poněkud uhlazeněji.). Poté v cyklu smažeme všechny dceřiné uzly našeho elementu (je docela škoda, že autoři DOMu na toto nevyhradili speciální metodu). Nakonec vložíme nový obsah, tj. textový uzel, který jsme si dříve vytvořili.
Naše ukázka však není příliš optimální, bylo by vhodné v metodě public void setValueAt(Object value, int row, int col) { Element it = ((Element)doc.getDocumentElement().getElementsByTagName("person").item(row)); if (it==null) return; Element el = (Element)it.getElementsByTagName(tags[col]).item(0); if (el==null) { el = doc.createElement(tags[col]); it.appendChild(el); }; Text newText = doc.createTextNode(value.toString()); while (el.getFirstChild()!=null){ el.removeChild(el.getFirstChild()); } el.appendChild(newText); }
Toto řešení by nám případně umožnilo odstranit vytváření těchto elementů z metody
Další jistě užitečnou optimalizaci by představovalo umístění instance seznamu uzlů vraceného často používanou konstrukcí Příště rozbor naší ukázky uzavřeme čtyřmi metodami implementujícími funkcionalitu čtyř tlačítek "Add", "Delete", "Move up" a "Move down" u dolní (jižní ^_~) hrany okna naší aplikace.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |