DOM — мощный инструмент синтаксического анализа, подходящий для небольших документов.
Почему ты так говоришь? Потому что он загрузит весь XML-документ в память, чтобы сформировать дерево объектов документа.
В общем, звучит страшно, но использовать его для чтения мелочей довольно удобно по сравнению с Sax.
Что касается его операций добавления и удаления и т. д., то я не планирую его писать. Когда я смотрел туториал, меня чуть не стошнило из-за некрасивого кода.
Именно благодаря этому позже появились такие инструменты, как jdom и dom4j...
Нечего сказать, просто перейдите к коду
Пример парсинга Dom
импортировать javax.xml.parsers.DocumentBuilder;
импортировать javax.xml.parsers.DocumentBuilderFactory;
импортировать org.w3c.dom.Document;
импортировать org.w3c.dom.Element;
импортировать org.w3c.dom.NamedNodeMap;
импортировать org.w3c.dom.Node;
импортировать org.w3c.dom.NodeList;
публичный класс Демо {
public static void main(String[] args) выдает исключение {
//Создаем экземпляр фабрики парсера и генерируем парсер
Фабрика DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
Конструктор DocumentBuilder = Factory.newDocumentBuilder();
//Создаем объект документа, который необходимо проанализировать
Файл f = новый файл("books.xml");
//Разбираем документ и возвращаем объект Document. В этот момент XML-документ загружен в память.
//Ладно, давайте сделаем парсинг более интенсивным, а остальное — получение данных.
Документ документа = builder.parse(f);
//Получаем корневой элемент документа
//Вы спрашиваете меня, почему я это делаю? Потому что сам объект документа представляет собой древовидную структуру, и это корень дерева.
//Конечно, вы также можете найти коллекцию элементов напрямую и пропустить этот шаг
Корень элемента = doc.getDocumentElement();
//Корневой узел был найден выше, и здесь мы начинаем получать коллекцию элементов под корневым узлом.
Список NodeList = root.getElementsByTagName("book");
for (int i = 0; i < list.getLength(); i++) {
//Находим узел в коллекции с помощью метода item() и преобразуем его в объект Element
Элемент n = (Элемент) list.item(i);
//Получаем карту атрибутов объекта, используем цикл for для извлечения и печати
Узел NamedNodeMap = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
Узел nn = node.item(x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
}
//Выводим содержимое элемента, код очень сложный, почти фиксированный формат
System.out.println("title: " +n.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.println("автор: " + n.getElementsByTagName("автор").item(0).getFirstChild().getNodeValue());
Система.out.println();
}
}
}
Результат вывода: