Сегодня мы вернемся к Java после серии статей по разработке под Android и поговорим о работе с xml, а именно чтению xml файлов в Java с помощью DOM Parser.
DOM XML Parser
является самым легким для понимания, так как загружает содержимое XML-файла в память в виде документа, по которому мы можем легко перемещаться.
DOM Parser
отлично подходит для маленьких документов XML, так как он загружает полный XML файл в память. Для больших файлов XML, нужно использовать SAX Parser, о котором мы поговорим в следующих статьях.
В этом уроке мы будем читать XML файл и создавать из него объект.
Давайте посмотрим на структуру XML файла, с которым мы будем работать:
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0"?> <Languages> <Language> <name>Java</name> <age>21</age> </Language> <Language> <name>C</name> <age>44</age> </Language> </Languages> |
Теперь напишем класс Language, который будет представлять собой один xml-блок <Language>...</Language>
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Language { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Language: Name = " + this.name + " Age = " + this.age; } } |
Обратите внимание на то, что был переопределен метод toString()
, который будет печатать полезную информацию о языке программирования в удобном для нас виде.
Если у Вас возникли трудности с пониманием переопределения методов, советую узнать подробнее об аннотации @Override. Если вы новичок и не знаете что такое аннотации, почитайте Руководство по аннотациям в Java.
Ниже представлена Java программа, которая использует DOM XML Parser
для чтения и разбора XML-файла в список объектов Language:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
package ua.com.prologistic; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DOMxmlReader { public static void main(String[] args) { String filepath = "languages.xml"; File xmlFile = new File(filepath); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { builder = factory.newDocumentBuilder(); Document document = builder.parse(xmlFile); document.getDocumentElement().normalize(); System.out.println("Корневой элемент: " + doc.getDocumentElement().getNodeName()); // получаем узлы с именем Language // теперь XML полностью загружен в память // в виде объекта Document NodeList nodeList = doc.getElementsByTagName("Language"); // создадим из него список объектов Language List<Language> langList = new ArrayList<Language>(); for (int i = 0; i < nodeList.getLength(); i++) { langList.add(getLanguage(nodeList.item(i))); } // печатаем в консоль информацию по каждому объекту Language for (Language lang : langList) { System.out.println(lang.toString()); } } catch (Exception exc) { exc.printStackTrace(); } } // создаем из узла документа объект Language private static Language getLanguage(Node node) { Language lang = new Language(); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; lang.setName(getTagValue("name", element)); lang.setAge(Integer.parseInt(getTagValue("age", element))); } return lang; } // получаем значение элемента по указанному тегу private static String getTagValue(String tag, Element element) { NodeList nodeList = element.getElementsByTagName(tag).item(0).getChildNodes(); Node node = (Node) nodeList.item(0); return node.getNodeValue(); } } |
Результат выполнения программы чтения XML-файла с помощью DOM XML Parser:
1 2 3 |
Корневой элемент: Languages Language: Name = Java Age = 21 Language: Name = C Age = 44 |
Следите за другими статьями категории Работа с XML в Java.