Java как прочитать файл xml

Обновлено: 02.07.2024

Как прочитать вышеуказанный XML-файл с помощью чтения XML через Java?

Так как вы хотите разобрать файлы конфигурации, я думаю commons-configuration было бы лучшим решением.

конфигурация Commons предоставляет общий интерфейс конфигурации, который позволяет приложению Java считывать данные конфигурации из различных источников (включая XML)

Мне нравится jdom:

вы можете использовать простой парсер DOM для чтения xml-представления.

Если вам просто нужно простое решение, включенное в Java SDK (начиная с 5.0), проверьте пакет XPath. Я уверен, что другие лучше, но это было все, что мне нужно. Вот пример:

строки.в XML

существует несколько синтаксических анализаторов XML для Java. Один я использовал и особенно дружественный составляет помощи jdom. И под дружественным к разработчику я подразумеваю " Java oriented "(т. е. вы работаете с объектами в своей программе), а не" document oriented", как некоторые другие инструменты.

Я бы порекомендовал Commons Digester , что позволяет анализировать файл без написания пачек кода. Он использует ряд правил для определения того, какое действие должно выполняться при столкновении с данным элементом или атрибутом (типичным правилом может быть создание определенного бизнес-объекта).

для аналогичного случая использования в моем приложении я использовал JaxB. С Jaxb чтение XML-файлов похоже на взаимодействие с Java POJOs. Но чтобы использовать JAXB, вам нужно иметь xsd для этого xml-файла. Вы можете найти более подробную информацию здесь

Если вы хотите иметь возможность читать и записывать объекты в XML напрямую, вы можете использовать кинокомпании xStream

хотя я еще не пробовал XPath, поскольку он только что привлек мое внимание, я попробовал несколько решений и не нашел ничего, что работает для этого сценария.

Я решил создать библиотеку, которая удовлетворит эту потребность, пока вы работаете в соответствии с предположениями, упомянутыми в readme. Он имеет то преимущество, что он использует SAX для анализа всего файла и возврата его пользователю в виде карты, чтобы вы могли искать значения как ключ - > значение.

Если что-то отсутствует, любезно сообщите мне о недостающем элементе, поскольку я разрабатываю его только на основе потребностей других и себя.

Существуют две стратегии обработки XML документов: DOM (Document Object Model) и SAX (Simple API for XML). Основное их отличие связано с тем, что использование DOM позволяет читать и вносить изменения в существующий XML-документ, а также создавать новый. Стратегия использования SAX основывается на том, что содержимое XML-документа только анализируется. XML-текст может быть больших размеров: DOM должен весь документ «заглотить» и проанализировать, а SAX-парсер обрабатывает XML-документ последовательно и не требует дополнительной памяти.

Для работы с XML-файлами Java располагает достаточно большим набором инструментов, начиная от встроенных возможностей, которые предоставляет Core Java, и заканчивая большим набором разнообразного стороннего кода, оформленного в виде библиотек. Сначала рассмотрим использование DOM для чтения XML-файла и создания нового файла/документа. А в заключение будет приведено описание и применение SAX-парсера SAXParser.

XML документ представляет собой набор узлов (тегов). Каждый узел может иметь неограниченное количество дочерних узлов, которые, в свою очередь, также могут содержать потомков или не содержать их совсем. Таким образом строится дерево объектов. DOM - это объектная модель документа, которая представляет собой это дерево в виде специальных объектов/узлов org.w3c.dom.Node. Каждый узел Node соответствует своему XML-тегу и содержит полную информацию о том, что это за тег, какие он имеет атрибуты, какие дочерние узлы содержит внутри себя и т.д. На самой вершине этой иерархии находится org.w3c.dom.Document, который является корневым элементов дерева.

Чтение XML-файла

Получить объект Document XML-файла можно следующим образом :

Чтобы найти какой-либо узел в дереве можно использовать метод getElementsByTagName, который возвращает список всех элементов :

Метод getElementsByTagName является case-sensitive, т.е. различает прописные и строчные символы.

В цикле можно просмотреть все дочерние узлы. C помощью метода getAttributes можно узнать атрибуты узла. Метод getNodeType позволяет проверить тип узла :

Создание XML-файла

Для создания нового объекта Document используйте следующий код :

Элемент Element объекта Document создается с использованием метода createElement. Для определения значения элемента следует использовать метод setTextContent. Для добавления элемента в узловую запись используйте метод appendChild (Node). Элемент может содержать атрибуты. Чтобы добавить к элементу атрибут следует использовать метод setAttribute. Если элемент уже содержит атрибут, то его значение изменится.

В результате работы примера будет создан Document следующей структуры :

Пример чтения и создания XML-файла

Для чтения готового XML-файла и формирования нового файла создадим в IDE Eclipse простой проект XMLSample, структура которого представлена на следующем скриншоте.


Проект включает XML-файл "posts.xml" с исходными данными, создаваемый XML-файл данных "data.xml", класс Post.java, в который будут упаковываться отдельные записи массива данных и основной класс проекта XMLSample, который будет производить все необходимые действия.

Структура XML-файла

В качестве исходных данных используется XML-файл "posts.xml" из примеров разработчиков Sencha GXT 3.1.1. Структура XML-данных содержит корневой элемент <ROOT> и набор объектов/сущностей, представленных тегами <row />.

Листинг класса Person

Класс Person имеет несколько полей. Идентификатор записи id определяется при создании объекта в конструкторе. Методы set/get не представлены в листинге.

Чтение XML-файла

Для чтения XML-файла в проекте используется метод readDataXML(), который создает список persons типа List<Person>, читает XML-файл данных и формирует объект doc типа Document. После этого в цикле создается массив данных. Вспомогательная функция getValue извлекает текст атрибута записи.

Следует обратить внимание, что для чтения значения атрибута записи (объекта Person) сначала получаем ссылку на массив тегов <field>, и после этого по индексу в функции getValue извлекаем значение.

Создание XML-файла

Для создания нового XML-файла на основе массива posts подготовим два списка данных типа List : пользователей users и форумов forums. Эти два массива запишем в XML-файл.

Создание нового объекта Document и сохранение его в XML-файл в проекте выполняет метод writeDataXML :

Листинг метода создания XML-файла

Процедура сохранения объекта Document в XML-файл представлена отдельным методом writeDocument :

Листинг процедуры сохранения XML-файла

Если массив posts окажется пустым, то новый XML-файл должен будет иметь следующий вид :

SAX-парсер, SAXParser

SAX-парсеры используют для анализа XML-строки или извлечения из нее необходимой информации. Обычно SAX-парсеры требуют фиксированный объем памяти и не позволяют изменять содержимое. Для связи SAX-парсера с вызывающим приложением, как правило, используется функция обратного вызова.

Рассмотрим пример SAXExample.java с использованием класса SAXParser для анализа XML-текста, представленного файлом phonebook.xml, содержащего 3 записи и имеющего следующий вид :

Файл phonebook.xml

Пакеты «javax.xml.parsers» и «org.xml.sax» включают набор классов для «разбора» XML в строковом представлении. К основным классам этих пакетов, с точки зрения разложения XML объекта на составляющие, относятся SAXParser и DefaultHandler.

В примере SAXExample.java создается класс handler типа DefaultHandler, в котором методы анализа XML-строки переопределяются. Все прозрачно.

Листинг SAXExample.java

Рассмотренные на странице примеры использования DOM для чтения и создания XML-документа, применения SAXParser'а для анализа XML-текста в виде проекта Eclipse можно скачать здесь (133 Кб).

Этот учебник покажет вам, как использовать встроенный в Java анализатор DOM для чтения XML-файла.

Автор оригинала: mkyong.

Этот учебник покажет вам, как использовать встроенный в Java анализатор DOM для чтения XML-файла.

Примечание Анализатор DOM работает медленно и потребляет много памяти при чтении большого XML-документа, потому что он загружает все узлы в память для обхода и манипулирования.

Вместо этого мы должны рассмотреть синтаксический анализатор SAX для чтения XML-документа большого размера, SAX работает быстрее, чем DOM, и использует меньше памяти.

1. Что такое Объектная модель документа (DOM)

Объектная модель документа (DOM) использует узлы для представления документа HTML или XML в виде древовидной структуры.

Ниже приведен простой XML-документ:

Основные общие термины.

2. Читать или анализировать XML-файл

В этом примере показано, как использовать встроенные API DOM-анализатора Java для чтения или анализа XML-файла.

2.1 Просмотрите приведенный ниже XML-файл.

2.2 Ниже приведен пример синтаксического анализа DOM для анализа или чтения вышеупомянутого XML-файла.

3. Чтение или анализ XML-файла (Юникод)

В синтаксическом анализаторе DOM нет разницы между чтением обычного XML-файла и XML-файла в Юникоде.

3.1 Просмотрите приведенный ниже XML-файл, содержащий некоторые китайские иероглифы (Юникод).

3.2 Приведенный ниже пример анализирует приведенный выше XML-файл; он перебирает все узлы один за другим и распечатывает его.

4. Анализировать XML-ответ Alexa API

В этом примере показано, как использовать анализатор DOM для анализа XML-ответа из API Alexa.

4.1 Отправьте запрос на следующий API Alexa.

4.2 API Alexa вернет следующий XML-ответ. Рейтинг Alexa находится внутри элемента ПОПУЛЯРНОСТЬ , атрибута ТЕКСТ .

4.3 Мы используем анализатор DOM, чтобы напрямую выбрать элемент ПОПУЛЯРНОСТЬ и распечатать значение атрибута ТЕКСТ .

Примечание Дополнительные примеры синтаксического анализа DOM – Oracle – Чтение XML-данных в DOM

Теги XML не предопределены как HTML.

Вы можете определить свои собственные теги, поэтому он называется расширяемым языком.

XML-теги предназначены для самоописания.

Теги XML не предопределены как HTML.

Вы можете определить свои собственные теги, поэтому он называется расширяемым языком.

XML-теги предназначены для самоописания.

пример

преимущества

Ниже приведены преимущества, которые предоставляет XML:

Недостатки

Избыточный синтаксис. Обычно XML-файлы содержат много повторяющихся терминов.

Verbose. Будучи многословным языком, размер файла XML увеличивает стоимость передачи и хранения.

Избыточный синтаксис. Обычно XML-файлы содержат много повторяющихся терминов.

Verbose. Будучи многословным языком, размер файла XML увеличивает стоимость передачи и хранения.

Синтаксический анализ XML относится к просмотру XML-документа для доступа к данным или их изменения.

Что такое XML Parser?

XML Parser предоставляет способ доступа или изменения данных в документе XML. Java предоставляет несколько опций для анализа XML-документов. Ниже приведены различные типы синтаксических анализаторов, которые обычно используются для анализа XML-документов.

Доступны API-интерфейсы JAXB и XSLT для обработки синтаксического анализа XML объектно-ориентированным способом. Мы подробно рассмотрим каждый синтаксический анализатор в последующих главах этого урока.

Объектная модель документа (DOM) является официальной рекомендацией Консорциума World Wide Web (W3C). Он определяет интерфейс, который позволяет программам получать доступ и обновлять стиль, структуру и содержимое документов XML. XML-парсеры, поддерживающие DOM, реализуют этот интерфейс.

Когда использовать?

Вам нужно много знать о структуре документа.

Вам нужно перемещать части XML-документа (например, вы можете отсортировать определенные элементы).

Вам необходимо использовать информацию в документе XML более одного раза.

Вам нужно много знать о структуре документа.

Вам нужно перемещать части XML-документа (например, вы можете отсортировать определенные элементы).

Вам необходимо использовать информацию в документе XML более одного раза.

Что вы получаете?

Когда вы анализируете документ XML с помощью анализатора DOM, вы получаете древовидную структуру, которая содержит все элементы вашего документа. DOM предоставляет множество функций, которые вы можете использовать для проверки содержимого и структуры документа.

преимущества

DOM интерфейсы

Общие методы DOM

Когда вы работаете с DOM, вы часто будете использовать несколько методов:

Шаги к использованию JDOM

Ниже приведены шаги, используемые при синтаксическом анализе документа с использованием JDOM Parser.

  • Импорт пакетов, связанных с XML.
  • Создать DocumentBuilder
  • Создать документ из файла или потока
  • Извлечь корневой элемент
  • Изучить атрибуты
  • Изучить подэлементы

Импорт пакетов, связанных с XML

Создать DocumentBuilder

Создать документ из файла или потока

Извлечь корневой элемент

Изучить атрибуты

Изучить подэлементы

Демо-пример

DomParserDemo.java

Демо-пример

QueryXmlFileDemo.java

Демо-пример

CreateXmlFileDemo.java

Демо-пример

ModifyXmlFileDemo.java

Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

Токены обрабатываются в том же порядке, в котором они появляются в документе.

Сообщает прикладной программе о природе токенов, с которыми анализатор сталкивался по мере их появления.

Когда токены идентифицированы, методы обратного вызова в обработчике вызываются с соответствующей информацией.

Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

Токены обрабатываются в том же порядке, в котором они появляются в документе.

Сообщает прикладной программе о природе токенов, с которыми анализатор сталкивался по мере их появления.

Когда токены идентифицированы, методы обратного вызова в обработчике вызываются с соответствующей информацией.

Когда использовать?

Вы можете обрабатывать XML-документ линейно сверху вниз.

Документ не является глубоко вложенным.

Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать слишком много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

Проблема, которая должна быть решена, включает в себя только часть XML-документа.

Данные становятся доступными, как только они видятся синтаксическим анализатором, поэтому SAX хорошо работает для XML-документа, который поступает через поток.

Вы можете обрабатывать XML-документ линейно сверху вниз.

Документ не является глубоко вложенным.

Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать слишком много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

Проблема, которая должна быть решена, включает в себя только часть XML-документа.

Данные становятся доступными, как только они видятся синтаксическим анализатором, поэтому SAX хорошо работает для XML-документа, который поступает через поток.

Недостатки SAX

У нас нет произвольного доступа к документу XML, так как он обрабатывается только для пересылки.

Если вам нужно отслеживать данные, которые анализатор видел, или изменять порядок элементов, вы должны написать код и сохранить данные самостоятельно.

У нас нет произвольного доступа к документу XML, так как он обрабатывается только для пересылки.

Если вам нужно отслеживать данные, которые анализатор видел, или изменять порядок элементов, вы должны написать код и сохранить данные самостоятельно.

Интерфейс ContentHandler

Этот интерфейс указывает методы обратного вызова, которые использует синтаксический анализатор SAX для уведомления прикладной программы о компонентах документа XML, которые он видел.

Интерфейс атрибутов

Этот интерфейс определяет методы для обработки атрибутов, связанных с элементом.

Строка getQName (int index)

Строка getValue (int index)

Строка getValue (Строка qname)

Строка getQName (int index)

Строка getValue (int index)

Строка getValue (Строка qname)

Демо-пример

UserHandler.java

SAXParserDemo.java

Демо-пример

Вот входной текстовый файл, который нам нужен для запроса rollno: 393

UserHandler.java

SAXQueryDemo.java

Для создания документов XML лучше использовать анализатор StAX, а не анализатор SAX. Пожалуйста, обратитесь к разделу Java StAX Parser для того же.

Демо-пример

Вот входной XML-файл, который нам нужно изменить, добавив тег <Result> Pass <Result /> в конце тега </ marks>.

SAXModifyDemo.java

JDOM работает с DOM и SAX API и сочетает в себе лучшее из двух. Он занимает мало памяти и почти так же быстр, как SAX.

Настройка среды

Чтобы использовать анализатор JDOM, у вас должен быть jdom.jar в пути к классу вашего приложения. Загрузите jdom-2.0.5.zip.

Когда использовать?

Вам нужно много знать о структуре XML-документа.

Вам необходимо перемещать части документа XMl (например, вы можете отсортировать определенные элементы).

Вам необходимо использовать информацию в документе XML более одного раза.

Вы являетесь разработчиком Java и хотите использовать оптимизированный для Java синтаксический анализ XML.

Вам нужно много знать о структуре XML-документа.

Вам необходимо перемещать части документа XMl (например, вы можете отсортировать определенные элементы).

Вам необходимо использовать информацию в документе XML более одного раза.

Вы являетесь разработчиком Java и хотите использовать оптимизированный для Java синтаксический анализ XML.

Что вы получаете?

Когда вы анализируете документ XML с помощью синтаксического анализатора JDOM, вы получаете гибкость, чтобы получить древовидную структуру, которая содержит все элементы вашего документа, не влияя на объем памяти приложения.

JDOM предоставляет множество служебных функций, которые можно использовать для проверки содержимого и структуры документа XML в случае, если документ хорошо структурирован и его структура известна.

преимущества

JDOM предоставляет разработчикам Java гибкость и простоту обслуживания кода синтаксического анализа XML. Это легкий и быстрый API.

Классы JDOM

Шаги к использованию JDOM

Ниже приведены шаги, используемые при синтаксическом анализе документа с использованием JDOM Parser.

  • Импорт пакетов, связанных с XML.
  • Создать SAXBuilder
  • Создать документ из файла или потока
  • Извлечь корневой элемент
  • Изучить атрибуты
  • Изучить подэлементы

Импорт пакетов, связанных с XML

Создать DocumentBuilder

Создать документ из файла или потока

Извлечь корневой элемент

Изучить атрибуты

Изучить подэлементы

Демо-пример

DomParserDemo.java

Демо-пример

QueryXmlFileDemo.java

Демо-пример

CreateXmlFileDemo.java

Демо-пример

ModifyXmlFileDemo.java

StAX API может читать и писать документы XML. Используя SAX API, XML-файл можно только читать.

StAX API может читать и писать документы XML. Используя SAX API, XML-файл можно только читать.

Настройка среды

Чтобы использовать анализатор StAX, у вас должен быть stax.jar в пути к классу вашего приложения.

Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

Токены обрабатываются в том же порядке, в котором они появляются в документе.

Сообщает прикладной программе о природе токенов, с которыми анализатор сталкивался по мере их появления.

Когда события идентифицированы, элементы XML могут быть извлечены из объекта события и могут быть обработаны в дальнейшем.

Читает XML-документ сверху вниз, распознавая токены, которые составляют правильно сформированный XML-документ.

Токены обрабатываются в том же порядке, в котором они появляются в документе.

Сообщает прикладной программе о природе токенов, с которыми анализатор сталкивался по мере их появления.

Когда события идентифицированы, элементы XML могут быть извлечены из объекта события и могут быть обработаны в дальнейшем.

Когда использовать?

Вы можете обрабатывать XML-документ линейно сверху вниз.

Документ не является глубоко вложенным.

Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать слишком много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

Проблема, которая должна быть решена, включает в себя только часть XML-документа.

Данные становятся доступными, как только они анализируются парсером, поэтому StAX хорошо работает для XML-документа, который поступает через поток.

Вы можете обрабатывать XML-документ линейно сверху вниз.

Документ не является глубоко вложенным.

Вы обрабатываете очень большой XML-документ, дерево DOM которого будет занимать слишком много памяти. Типичные реализации DOM используют десять байтов памяти для представления одного байта XML.

Проблема, которая должна быть решена, включает в себя только часть XML-документа.

Данные становятся доступными, как только они анализируются парсером, поэтому StAX хорошо работает для XML-документа, который поступает через поток.

Недостатки SAX

У нас нет произвольного доступа к документу XML, так как он обрабатывается только для пересылки.

Если вам нужно отслеживать данные, которые анализатор видел или где анализатор изменил порядок элементов, то вы должны написать код и сохранить данные самостоятельно.

У нас нет произвольного доступа к документу XML, так как он обрабатывается только для пересылки.

Если вам нужно отслеживать данные, которые анализатор видел или где анализатор изменил порядок элементов, то вы должны написать код и сохранить данные самостоятельно.

Класс XMLEventReader

Этот класс предоставляет итератор событий, который можно использовать для итерации по событиям, возникающим при анализе XML-документа.

Класс XMLEventWriter

Этот интерфейс определяет методы для создания события.

Класс XMLStreamReader

Этот класс предоставляет итератор событий, который можно использовать для итерации по событиям, возникающим при анализе XML-документа.

Класс XMLStreamWriter

Этот интерфейс определяет методы для создания события.

Демо-пример

StAXParserDemo.java

Демо-пример

StAXParserDemo.java

Демо-пример

StAXCreateXMLDemo.java

Демо-пример

StAXModifyDemo.java

XPath является официальной рекомендацией Консорциума World Wide Web (W3C). Он определяет язык для поиска информации в файле XML. Он используется для обхода элементов и атрибутов XML-документа. XPath предоставляет различные типы выражений, которые можно использовать для запроса соответствующей информации из документа XML.

Что такое XPath?

Выражения XPath

XPath использует выражение пути для выбора узла или списка узлов в документе XML. Ниже приведен список полезных путей и выражений для выбора любого узла / списка узлов из XML-документа.

Выберите все узлы с заданным именем «nodename»

Выбор начинается с корневого узла

Выбор начинается с текущего узла, соответствующего выбору

Выбирает текущий узел

Выбирает родителя текущего узла

класс / студент

Выбирает все элементы ученика независимо от того, где они находятся в документе

Выберите все узлы с заданным именем «nodename»

Выбор начинается с корневого узла

Выбор начинается с текущего узла, соответствующего выбору

Выбирает текущий узел

Выбирает родителя текущего узла

класс / студент

Выбирает все элементы ученика независимо от того, где они находятся в документе

Предикаты

Шаги к использованию XPath

Ниже приведены шаги, используемые при анализе документа с использованием XPath Parser.

Читайте также: