Prosty przepis na obsługę dokumentów XML – JDOM Parser

Przy okazji prac nad wzorcami do rozpoznawania znaków natworzyłem masę plików z obrazkami zawierającymi znaki. Nie chciałem wczytywać każdego pliku z osobna, więc postanowiłem utworzyć zbiór w pliku XML. Jako, że nie orientuję się zbyt dobrze w ekosystemie Javowym wyruszyłem na łowy – wujek Google był moim przewodnikiem. Podczas wędrówki w otchłaniach „internetów” natrafiłem na opis biblioteki JDOM. Zagłębiłem się w opis i przykłady – spełniała moje niewygórowane wymagania. Miała być zwyczajnie prosta w obsłudze.

Utworzenie nowego dokumentu XML sprowadza się do wywołania dwóch linijek, które tak naprawdę można było skrócić do jednej.

Element rootNode = new Element("rootNode");
Document doc = new Document(rootNode);

Dodawanie atrybutów odbywa się przy użyciu funkcji setAttribute(…):

Element node= new Element("node");

node.setAttribute("attributeName", "attributeValue");

Jeśli chcielibyśmy dodać jakąś zawartość do elementu wystarczy wywołać addContent(…).

node.addContent('zawartosc');

 

W analogiczny sposób dodajemy gotowy element do jego elementu nadrzędnego, czyli np..:

rootNode.addContent(node);

Zapis do pliku nie jest moim zdaniem skomplikowany. Wystarczy wywołać:

XMLOutputter xmlOutput = new XMLOutputter();

xmlOutput.setFormat(Format.getPrettyFormat()); // ustawiamy m. in. wcięcia w dokumencie na 2 spacje, kodowanie na UTF-8
xmlOutput.output(doc, new FileWriter("path\to\the\file.xml"));

 

Prawda, że proste?

Odczyt danych z pliku jest na podobnym poziomie trudności:

File inputFile = new File("file.xml");

SAXBuilder saxBuilder = new SAXBuilder();

Document document = saxBuilder.build(inputFile);

Zamiast pliku możemy także podać np. URL lub strumień danych.

Po otwarciu dokumentu pozostaje dobrać się do jego zawartości. Wystarczy pobrać „korzeń” (root) dokumentu przy pomocy funkcji getRootElement() wywoływanej na dokumencie.

W moim konkretnym przypadku dobrałem się do wszystkich potomków elementu nadrzędnego wywołaniem:

Element rootElement = document.getRootElement();
List<Element> children = rootElement.getChildren();

 

Następnie pobrałem atrybuty potomka przy pomocy funkcji getAttributeValue(final String attname), a zawartość getContent(final int index).

Przykładowe wykonanie:

String character = child.getAttributeValue("name");

String content = child.getContent(0).getValue();

 

 

Strona biblioteki: http://www.jdom.org/

 

PS. To jedna z tych sytuacji w których użycie słowa „potomek” w sformułowaniach jest bezpieczniejsze niż „dziecko” 😉

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *