Рекламное объявление
Хотите узнать, как читать и записывать XML-файл из java?
XML файлы Что такое XML-файл и как его открыть и использовать?Возможно, вы видели термин «XML». Возможно, вы даже случайно открыли XML-файл. Что такое XML и как его использовать? Подробнее используются для различных целей, включая хранение данных. До того, как JSON стал популярным, XML был предпочтительным форматом для представления, хранения и транспортировки структурированных данных. Несмотря на то, что популярность XML в последние годы пошла на убыль, вы можете иногда сталкиваться с ним, поэтому важно научиться работать с ним из кода.
Стандартная версия Java (SE) 10 основных концепций Java, которые вы должны изучить, приступая к работеПишете ли вы графический интерфейс, разрабатываете серверное программное обеспечение или мобильное приложение на Android, изучение Java будет вам полезно. Вот несколько основных концепций Java, которые помогут вам начать работу. Подробнее включает Java API для обработки XML (JAXP)
, который является общим термином, охватывающим большинство аспектов обработки XML. Это включает:- ДОМ: Объектная модель документа включает классы для работы с артефактами XML, такими как элемент, узел, атрибуты и т. Д. DOM API загружает полный XML-документ в память для обработки, поэтому он не очень подходит для работы с большими XML-файлами.
- SAX: Простой API для XML - это управляемый событиями алгоритм чтения XML. Здесь XML обрабатывается путем запуска событий, обнаруженных при чтении XML. Требования к памяти для использования этого метода невысоки, но работать с API сложнее, чем с DOM.
- StAX: Streaming API для XML является недавним дополнением к XML API и обеспечивает высокопроизводительную фильтрацию, обработку и модификацию потоков XML. Хотя он позволяет избежать загрузки всего XML-документа в память, он обеспечивает архитектуру вытягивающего типа, а не чем архитектура, управляемая событиями, поэтому приложение легче кодировать и понимать, чем использование SAX API.
В этой статье мы используем DOM API чтобы продемонстрировать, как читать и писать файлы XML из java. Мы рассмотрим два других API в следующих статьях.
Образец XML-файла
Для целей этой статьи мы продемонстрируем концепции, используя следующий образец XML, который можно найти здесь:
1.0?>Гамбарделла, Мэтью Руководство разработчика XML
Компьютер 44.95 2000-10-01 Углубленный взгляд на создание приложений с помощью XML. Раллы, Ким ...
Чтение XML-файла
Давайте посмотрим на основные шаги, необходимые для чтения XML-файла с помощью DOM API.
Первый шаг - получить экземпляр DocumentBuilder. Конструктор используется для анализа XML-документов. Для базового использования мы делаем это так:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (ложь); factory.setValidating (ложь); DocumentBuilder builder = factory.newDocumentBuilder ();
Теперь мы можем загрузить весь документ в память, начиная с корневого элемента XML. В нашем примере это каталог элемент.
Файл file =...; // XML-файл для чтения. Документ document = builder.parse (файл); Каталог элементов = document.getDocumentElement ();
Вот и все, ребята! DOM API для чтения XML действительно прост. Теперь у вас есть доступ ко всему XML-документу, начиная с его корневого элемента, каталог. Давайте теперь посмотрим, как с этим работать.
Использование DOM API
Теперь, когда у нас есть корень XML Элемент, мы можем использовать DOM API для извлечения интересных фрагментов информации.
Получите все книга дочерние элементы корневого элемента и перебирают их. Обратите внимание, что getChildNodes () возвращается все дети, включая текст, комментарии и т. д. Для нашей цели нам нужны только дочерние элементы, поэтому мы пропускаем остальные.
NodeList books = catalog.getChildNodes (); для (int i = 0, ii = 0, n = books.getLength (); я
Как найти конкретный дочерний элемент, учитывая родительский? Следующий статический метод возвращает первый совпадающий элемент, если он найден, или значение null. Как видите, процедура включает в себя получение списка дочерних узлов и их цикл, выбирая узлы элементов с указанным именем.
статический частный узел findFirstNamedElement (родительский узел, String tagName) {NodeList children = parent.getChildNodes (); для (int i = 0, in = children.getLength (); я
Обратите внимание, что DOM API обрабатывает текстовое содержимое внутри элемента как отдельный узел типа TEXT_NODE. Кроме того, текстовое содержимое может быть разделено на несколько смежных текстовых узлов. Таким образом, для получения текстового содержимого внутри элемента требуется следующая специальная обработка.
статическая частная строка getCharacterData (родительский узел) {StringBuilder text = новый StringBuilder (); if (parent == null) return text.toString (); NodeList children = parent.getChildNodes (); для (int k = 0, kn = children.getLength (); k
Вооружившись этими удобными функциями, давайте теперь посмотрим на код для вывода некоторой информации из нашего образца XML. Мы хотели бы показать подробную информацию по каждой книге, например, доступную в книжном каталоге.
NodeList books = catalog.getChildNodes (); для (int i = 0, ii = 0, n = books.getLength (); я
Написание вывода XML
Java предоставляет XML Tranform API для преобразования данных XML. Мы используем этот API с преобразование идентичности для генерации вывода.
В качестве примера добавим новый книга элемент в образец каталога, представленного выше. Детали книги (например, автор, заглавиеи т. д.) можно получить извне, например, из файла свойств или базы данных. Мы используем следующий файл свойств для загрузки данных.
id = bk113. автор = Джейн Остин. title = Гордость и предубеждение. жанр = Романс. цена = 6,99. publish_date = 01.04.2010. description = "Это общепризнанная истина, что одинокий мужчина, обладающий хорошим состоянием, должен нуждаться в жене". Так начинается гордость и «Предубеждение», остроумная комедия о манерах Джейн Остин - один из самых популярных романов всех времен. гордый мистер Дарси и предвзятая Элизабет Беннет, разыгрывающие свои пылкие ухаживания в гостиной восемнадцатого века интриги.
Первый шаг - проанализировать существующий XML-файл с помощью метода, представленного выше. Код также показан ниже.
Файл file =...; // XML-файл для чтения. Документ document = builder.parse (файл); Каталог элементов = document.getDocumentElement ();
Мы загружаем данные из файла свойств с помощью Характеристики класс, предоставляемый java. Код довольно простой и показан ниже.
Строка propsFile =...; Свойства props = новые свойства (); попробуйте (FileReader in = new FileReader (propsFile)) {props.load (in); }
После загрузки свойств мы извлекаем значения, которые хотим добавить, из файла свойств.
Строка id = props.getProperty ("id"); Строка author = props.getProperty («автор»); Строка title = props.getProperty ("название"); Строка genre = props.getProperty («жанр»); Строка price = props.getProperty ("цена"); Строка publish_date = props.getProperty ("publish_date"); String descr = props.getProperty («описание»);
Давайте теперь создадим пустой книга элемент.
Элемент book = document.createElement («книга»); book.setAttribute («идентификатор», идентификатор);
Добавление дочерних элементов в книга тривиально. Для удобства собираем необходимые названия элементов в Список и сложите значения в цикле.
Списокelnames = Arrays.asList («автор», «название», «жанр», «цена», «публикация_дата», «описание»); для (String elname: elnames) {Элемент el = document.createElement (elname); Текстовый текст = document.createTextNode (props.getProperty (elname)); el.appendChild (текст); book.appendChild (эль); } catalog.appendChild (книга);
И вот как это делается. В каталог элемент теперь имеет новый книга элемент добавлен. Теперь остается только выписать обновленный XML.
Для написания XML нам понадобится экземпляр Трансформатор который создается, как показано ниже. Обратите внимание, что мы запрашиваем отступ в выходном XML, используя setOutputProperty () метод.
TransformerFactory tfact = TransformerFactory.newInstance (); Трансформатор tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys. INDENT, "да"); tform.setOutputProperty ("{ http://xml.apache.org/xslt}indent-amount", "3");
Последним шагом в создании вывода XML является применение преобразования. Результат появится в выходном потоке, System.out.
tform.transform (новый DOMSource (документ), новый StreamResult (System.out));
Чтобы записать вывод непосредственно в файл, используйте следующее.
tform.transform (новый DOMSource (документ), новый StreamResult (новый файл ("output.xml")));
На этом мы завершаем статью о чтении и записи XML-файлов с помощью DOM API.
Вы использовали DOM API в своих приложениях? Как это работало? Пожалуйста, дайте нам знать в комментариях ниже.