7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Читаем XML файл на Java с помощью JDOM Parser

Содержание

Читаем XML файл на Java с помощью JDOM Parser

JDOM – это максимально упрощенная open source Java-библиотека для создания, парсинга, изменения и сериализации XML-документов. В отличие от других подобных DOM APIs, JDOM ориентированна на язык Java, а не на спецификации XML, что очень упрощает код и облегчает его интуитивное понимание. При этом JDOM не является «велосипедом» и не содержит в себе свой собственный парсер, а использует уже существующие наработки – стандартные пакеты javax.xml и org.xml.sax. Если вам понадобилось работать с XML, то обратите сначала внимание именно на эту библиотеку, скорее всего вам она понравится.

Краткое описание модели библиотеки JDOM

Так же, как и сам XML, JDOM APIs являются древовидными. Для представления XML в библиотеке, главным образом, используются классы Document, Element и Attribute.

Документ XML в JDOM представляет из себя дерево, корнем которого является объект класса Document. Экземпляр Document является контейнером для всех остальных элементов и обязательно содержит один корневой элемент (экземпляр Element). Главной характеристикой объекта Element является его содержание (Content) и список атрибутов (Attribute). Класс Content является родительским для классов Element, Comment и Text (а так же для некоторых других), поэтому экземпляры перечисленных классов могут быть содержимым объекта Element. Объект Element есть ничто иное как XML-тег, у которого обязательно должно быть имя и могут быть атрибуты. Классы Comment и Text соответственно представляют комментарий и текст внутри тега. Экземпляры Attribute, Comment и Text не могут содержать внутри себя никаких элементов и по сути являются объектами, которые содержат только текстовые значения. Значение экземпляра Attribute может быть получено по имени в отличие от Comment и Text, у которых имени нет.

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

Представленный документ является списком глав подразделений компании. Документ для простоты содержит всего два руководителя ( ). У каждого элемента есть атрибут id, а в качестве содержания – комментарий, кратко описывающий руководителя и элементы и , которые в свою очередь содержат текст, представляющий имя руководителя и название подразделения соответственно.

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

Для того чтобы создать XML-документ в общем случае необходимо выполнить следующие этапы:

  1. Создать экземпляр Document
  2. Создать корневой Element и добавить его в экземпляр Document
  3. Создать и заполнить, начиная с корневого элемента, необходимое дерево с помощью экземпляров Element, Attribute, Comment и т.д.
  4. Если необходимо, вывести (например в файл) созданный документ как поток байт с помощью класса XMLOutputter.

Пример метода, который создаёт описанное выше XML-дерево и выводит его на стандартный вывод, а так же в файл Heads.xml.

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

Метод addContent() после выполнения возвращает ссылку на тот же объект из которого он был вызван, благодаря чему можно создавать целую цепочку вызовов addContent(), заполняя содержание всех элементов очень небольшим объемом кода. Однако, не стоит этим сильно увлекаться, что бы код оставался понятным.

Форматом вывода можно управлять с помощью класса org.jdom.output.Format. Например, можно установить отступ, символ новой строки, кодировку вывода, указать как следует выводить пустые элементы ( или ), установить автоматическое удаление лишних пробельных символов и т.д..

Работа с существующим XML-файлом состоит из следующих этапов:

  1. Создание экземпляра класса org.jdom.input.SAXBuilder, который умеет строить JDOM-дерево из файлов, потоков, URL и т.д.
  2. Вызов метода build() экземпляра SAXBuilder с указанием файла или другого источника.
  3. Навигация по дереву и манипулирование элементами, если это необходимо.

С первыми двумя пунктами все предельно ясно, а вот навигация по дереву может осуществляться множеством способов.

Для того, чтобы пробежаться по всем элементам дерева (экземпляры Element), можно воспользоваться методом getChildren(), что бы получить список List всех дочерних экземпляров корневого Element, а затем для каждого дочернего элемента так же вызвать getChildren() и т.д.

Пример использования getChildren()

Можно поступить по-другому – использовать методы getContent() и getDescendants(), передавая им фильтры для того что бы ограничить выборку.

Метод getContent() возвращает список List вложенных элементов, причем поиск осуществляется только на глубине 1 уровня. Таким образом, с помощью getContent() можно получить дочерние элементы объекта у которого вызывается данный метод, но нельзя получить дочерние элементы его дочерних элементов.

Метод getDescendants() возвращает Iterator по всем найденным элементам, но в отличие от getContent() поиск ведется на всех уровнях вложенности элементов.

Как я уже сказал, для ограничения выборки дочерних элементов в обоих методах можно использовать фильтры. Фильтры это классы, которые реализуют интерфейс org.jdom.filter.Filter. В библиотеке JDOM есть два готовых класса фильтра, реализующих этот интерфейс: org.jdom.filter.ContentFilter и org.jdom.filter.ElementFilter. Используя фильтр ElementFilter, можно осуществлять поиск объектов Element ограничивая его именем элемента и/или пространством имен (Namespace), а с помощью ContentFilter можно ограничивать поиск определенным «видом» элемента, например, получить все комментарии и текст, которые содержит элемент или только текст и в таком духе. В тоже время интерфейс Filter очень прост и требует реализации лишь одного метода matches(java.lang.Object obj), который возвращает true в случае если элемент obj соответствует заданным параметрам фильтра, поэтому довольно легко можно создавать свои изощеренные фильтры.

Теперь приведу пример метода, который парсит созданный ранее XML-файл.
После выполнения метода на консоль будет выведено следующее:

Изменение дерева осуществляется с помощью различных методов вроде removeChild(), removeChildren(), removeContent(), addContent(), setContent(), removeAttribute(), setAttribute(), setName(), setText() и т.д. и т.п., думаю что это и так понятно.

Более подробную информацию о JDOM можно найти на официальном сайте, а так же в главах 14 и 15 свободно доступной книги о работе с XML на Java (всё на английском).

How to read XML file in Java – (DOM Parser)

In this tutorial, we will show you how to read an XML file via DOM XML parser. DOM parser parses the entire XML document and loads it into memory; then models it in a “TREE” structure for easy traversal or manipulation.

In short, it turns a XML file into DOM or Tree structure, and you have to traverse a node by node to get what you want.

Читать еще:  Находим разницу между двумя датами в Java

1. DOM XML Parser Example

This example shows you how to get the node by “name”, and display the value.

2. Looping the Node

This example reads the same “ staff.xml “, and showing you how to loop the node one by one, and print out the node name and value, and also the attribute if any.

References

mkyong

Comments

what is the use of normalize() please explain about that method?

This basically means that the following XML element
hello
wor
ld

could be represented like this in a DENORMALIZED node:

Element foo
Text node: “”
Text node: “Hello ”
Text node: “wor”
Text node: “ld”

When NORMALIZED, the node will look like this

Element foo
Text node: “Hello world”

boss getTextContent() is throwning an error .May i know what i need to do.

You are my hero рџ™‚
Thanks a lot for this.
For simple XML files this is much better than SAX Parser which to say the least is a f****** pain in the a**.

Both SAX and DOM has their target audience рџ™‚

Thanks for the tip man!

You may want to look at vtd-xml as the state of the art in XML processing, consuming far less memory than DOM

[…] P.S You can compare the syntax with SAX and DOM parser in the following two examples – How to read XML file in Java – (SAX Parser) – How to read XML file in Java – (DOM Parser) […]

I can just say thank you for this wonderful post!

‘Visual Basic Module Module1 Sub Main() Dim doc = XDocument.Load(“file.xml”) Console.WriteLine(“Root element :” & doc.Root.Name.ToString) Console.WriteLine(“———————–“) For Each staff In doc… Console.WriteLine(“First Name : ” & staff..Value) Console.WriteLine(“Last Name : ” & staff..Value) Console.WriteLine(“Nick Name : ” & staff..Value) Console.WriteLine(“Salary : ” & staff..Value) Next End Sub End Module

I d like to get a domme like this one ! More posts like this?

[…] Read XML file – (DOM Parser) Example to read a XML file with DOM parser. […]

[…] any body please tell me the advantage of jaxp over dom and sax parser i had gone through the site How to read XML file in Java – (DOM Parser) How to read XML file in Java – (SAX Parser) but there not defined the jaxp using and jaxb is […]

Thnaks for the article MkYong, the source explains well how to create an implementation of an XML parsing class, which will come very handy in my current project.
Thanx again…
Roger

This covers the very simple stuff but how do you get several layers down. for example

0
170
640
1
UINT32
ASCENDING

HOw do you get things like the MIN_VALUE or the TYPE, etc.

Obviously the xml get stripped out of the message, good going.

i want this code but for general XML not spesific ??

thank you very much, it was extremely helpful.

You save my time. Thanks a lot.

Excellent
Thanks a lot

Simple example, thanks! рџ™‚

So many Java tutorials out there are WAY TOO VERBOSE. Thank you for providing an example which can be glanced at to provide a solution. May you set the bar for other tutorial-writers to create such pragmatic examples.

ya, this is one of the reason to create mkyong.com, i just want a working solution and full example.

Thank you, Mkyong! It’s very helpful for me with this sample рџ™‚

AI-SAVE
45000
30/10/2016

CI Benefit (Add)
45000
30/10/2013
1

importPackage(Packages.org.apache.xerces.parsers);
importPackage(Packages.org.xml.sax);
importPackage(Packages.java.io);

var parser = new DOMParser();
parser.parse(new InputSource(new StringReader(dataSetRow[“V_ISSUECONTR_DATA”])));
var nodelist = parser.getDocument().getElementsByTagName(‘/RESULT/MESSAGE/BENEFITS/ROWSET/ROW’);
//var entry = nodelist.item(0).getFirstChild().getNodeValue();
var entry = nodelist.item(0).getFirstChild().getNodeValue();

Can you help me to get the AI-SAVE, above code gives error. Any help ?

Java json parser — пример работы парсера

В этом посте мы разберем подробный пример парсера Java JSON. JSON(JavaScript Object Notation) — это простой текстовый формат, который облегчает чтение и запись. Это широко используемый формат обмена данными, поскольку его анализ и генерация просты в использовании.

В языке Java есть несколько способов обработки JSON. В этом примере мы собираемся использовать общий набор инструментов — JSON.simple — и узнаем, как анализировать каждый тип файла.

Установка среды

Перед началом написания кода программы, мы должны установить подходящую среду для компилятора, чтобы распознавать классы JSON. Если необходимо построить проект с помощью Maven, нужно добавить следующую запись в pom.xml:

Иначе необходимо добавить версию json-simple-1.1.1.jar в CLASSPATH.

Пример парсинга JSON

Разберем, как мы можем проанализировать и произвести чтение файла json, для этого нужно создать наш собственный файл, он будет называться jsonTestFile.json. Он имеет следующую структуру:

Теперь необходимо создать файл Java в проекте с именем JsonParseTest и вставить следующий код.

Объясним данный код. После создания экземпляра JSONParser мы создаем объект JSONObject.

Он содержит коллекцию пар ключ-значение, из которых мы можем получить каждое значение. Чтобы распарсить объекты, вызывается метод get() экземпляра JSONObject, определяющий указанный ключ в качестве аргумента.

Важно применить подходящий метод. Для типов массивов в файле json используется JSONArray, который представляет упорядоченную последовательность значений. В программном коде итератор должен использоваться для получения каждого значения массива json.

Структура в файле предполагает создание нового объекта JSONObject для получения значений.

Полученный результат парсинга приведен ниже.

Метод с использованием JsonPATH

Два приведенных выше примера требуют полной десериализации JSON в объект Java перед получением значения. Другой альтернативой является использование JsonPATH, который похож на XPath для JSON и позволяет обходить объекты JSON.

Вам нужно добавить JsonPATH, которую можно получить из репозитория maven.(https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path)

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Java XML

J ava Development Kit поставляется с двумя парсерами XML: DOM и SAX, каждый из которых имеет свои сильные и слабые стороны. В этом руководстве мы рассмотрим несколько примеров создания, изменения и чтения XML файлов средствами библиотек DOM, SAX и JDOM.

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

DOM XML парсер

DOM XML парсер — наиболее простой способ работы с XML файлами в Java. При работе с XML файлами производится разбор всего файла, строится его объектная модель, которая полностью загружается в память. Для каждого XML элемента создается свой объект, между которыми организуется удобный способ навигации. DOM XML парсер не рекомендуется использоваться при работе с XML файлами большого размера: с такими файлами работа происходит очень медленно и расходуется очень большое количество памяти.

  • Чтение XML файла средствами DOM XML
    Прочитать XML файл и распечатать каждый из его элементов.
  • Внесение изменений в XML файл средствами DOM XML
    Внесение изменений в существующий XML файл: изменить XML элемент, изменить значения атрибутов, добавить и удалить XML элемент.
  • Создание XML файла средствами DOM XML
    Создать новый XML файл, в котором определены новый документ, XML элементы и добавлены атрибуты.
  • Подсчет XML элементов в файле средствами DOM XML
    Отыскать все XML элементы в файле и подсчитать их количество.

SAX XML парсер

SAX XML парсер работает не так, как DOM: он не читает весь XML файл целиком, не загружает его в память и не создает объекты для каждого элемента. Вместо этого, SAX парсер использует функцию обратного вызова (callback function) org.xml.sax.helpers.DefaultHandler , с помощью которой информирует клиента об изменении структуры XML документа.

Читать еще:  PortableApps.com — оболочка для использования портативных программ

Техника работы станет более понятно после рассмотрения конкретных примеров использования SAX XML парсера.

  • Чтение XML файла средствами SAX XML
    Прочитать XML файл с помощью SAX функции обратного вызова.

JDOM XML парсер

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

  • Чтение XML файла средствами JDOM XML
    Прочитать XML файл с помощью JDOM и распечатать каждый из элементов.
  • Внесение изменений в существующий XML файл средствами JDOM XML
    Внесение изменений в существующий XML файл: изменить XML элемент, изменить значения атрибутов, добавить и удалить XML элемент.
  • Создание XML файла средствами JDOM XML
    Создать новый XML файл, в котором определены новый документ, XML элементы и добавлены атрибуты.

Использование JAXB аннотаций для преобразования Java объектов в XML и обратно.

  • Примеры использования JAXB
    Примеры использования JAXB для выполнения XML Marshalling (преобразование Java объектов в XML) XML Unmarshalling (преобразование XML в Java объекты).

XML и Properties

Класс java.util.Properties имеет встроенную функциональность по преобразованию файла свойств (properties file) в XML и обратно.

Полезная информация

  • Вики страница «The Java API for XML Processing»: на русском и на английском (более подробно).
  • Документация по DOM XML парсеру .
  • Документация по SAX XML парсеру .
  • SAX XML парсер: быстрый старт .
  • Официальный сайт проекта JDOM .
  • Официальная страница проекта JAXB .
  • Документация класса Properties .

JavaScript-и CSS: набор (браузер Firefox) масштаб элемента iframe?

Я хотел бы создать страницу с несколькими элементами iframe показывать разные страницы – своего рода “просмотреть несколько бок о бок страницах” Тип вещи. Беда в том, что, поступая таким образом, видовые окна довольно маленькие, и я вижу только верхний левый угол каждой страницы. Есть ли способ, чтобы установить iframe, который будет эффективно уменьшить масштаб в Firefox (сочетание клавиш Ctrl-минус) пару .

Изменение iframe в src с помощью JavaScript

Я пытаюсь изменить элемент iframe в src, когда кто-то нажимает кнопку радио. По какой-то причине мой код не работает правильно, а у меня возникли проблемы, выясняя, почему. Вот что у меня: Untitled 1 .

Почему JavaScript работает только после вскрытия инструменты разработчика в IE один раз?

В IE9 ошибка – JavaScript и работает только после вскрытия инструменты разработчика один раз. Наш сайт предлагает бесплатное скачивание в формате PDF для пользователей, и она имеет простой “введите пароль чтобы скачать” функции. Впрочем, он вообще не работает в Интернет Эксплорер. Вы сами можете увидеть на этом примере: http://www.makeuseof.com/pages/how-to-use-virtual-box Скачать перевал “простой, легкий”. В любом другом браузере, все работает нормально. .

Атрибут href для JavaScript ссылки: “#” или “JavaScript:недействительным(0)”?

Ниже приводятся два способа построения ссылками, единственной целью которых выполняется код JavaScript. Что лучше, в плане функциональности, скорости загрузки страниц, проверка целей, и т. д.? function myJsFunc() < alert("myJsFunc"); >Run JavaScript Code или function myJsFunc() < alert("myJsFunc"); >Run JavaScript Code Когда у меня несколько искусственной-ссылок, я предпочитаю дать им класс ‘нет-ссылка”. Затем в jQuery, .

Простой способ повторить строку в Java

Я ищу простой способ общин или оператора, что позволяет мне повторить некоторые строки в N раз. Я знаю, я мог бы написать это с помощью цикла for, но я хотел бы избежать для петель по мере необходимости и простой прямой метод должен существовать где-то. String str = «abc»; String repeated = str.repeat(3); repeated.equals(«abcabcabc»); Связанные с: повторите строку на JavaScript создать .

Преобразование файла свойств (properties file) в XML

Для работы с файлами свойств (properties file) в Java есть очень полезный метод java.util.Properties. Он позволяет считывать информацию из файлов свойств, преобразовывая ее в Java объект, изменять содержимое и сохранять изменения на диск. Однако, не все разработчики знают о еще одной полезной возможности, которую предоставляет класс Properties: возможность импорта и экспорта данных в XML документ. Для получения подробной информации по .

Внесение изменений в XML файл средствами DOM XML

Внесение изменений в существующий XML файл с помощью библиотеки DOM XML. Будут рассмотрены следующие основные операции: Добавление нового элемента. Обновление значения атрибута существующего элемента. Обновление значение элемента. Удаление существующего элемента. XML файл Допустим, что у нас есть исходный XML файл. Иван Иванов ivanov 100000 .

Чтение XML файла в Java средствами DOM XML

В этой статье мы рассмотрим две программы, которые читают XML файл средствами библиотеки DOM XML Parser. DOM XML парсер читает содержимое всего XML файла и загружает в оперативную память. Таким образом, строится объектная модель исходного XML документа, используя которую можно работать с данными: читать/добавлять/удалять элементы документа, совершать обход дерева элементов и так далее. Если коротко, то библиотека DOM XML строит .

Примеры использования JAXB

JAXB расшифровывается как Java Architecture for XML Binding. Это технология, которая позволяет при помощи специальных аннотаций преобразовывать Java объекты в XML документы и обратно. В данном руководстве мы покажем, как использовать JAXB для выполнения операций: Marshalling — преобразование Java объекта в XML файл; Unmarshalling — преобразование XML файла в Java объект. Работать с JAXB довольно просто: достаточно проаннотировать свои классы .

Создание XML файла средствами DOM XML

DOM XML предоставляет несколько удобных способов создания XML файлов. В этой статье мы рассмотрим один из них. В общем случае процедуру можно описать так: В первую очередь, нам необходимо создать объект типа Document с помощью объекта DocumentBuilder. Вновь созданный документ заполняется содержимым: узлами (нодами), элементами и атрибутами. Это делается с помощью класса Element. Наконец, с помощью объекта типа Transformer мы .

Урок 14. Знакомство с форматом JSON. Парсинг JsonObject на примере объекта User

В этом уроке мы с вами более подробно познакомимся с форматом JSON . А потом из этого формата получим наш User объект.

JSON стал общепринятым форматом для обмена данными в клиент-серверных приложения. Он является универсальным форматом для обмена данными.

Представьте, что вам нужно создать систему приложений, в которую входит, сервер, web -клиент, ios -клиент, android -клиент. У всех технологий разные языки,
разные особенности. Поэтому сервер отвечает в формате JSON , а клиенты на своей стороне приводят к нужному формату ответы. Подробнее про JSON формат можно
почитать здесь, но на данном этапе ваших знаний уже вполне хватит.

JSONObject, работа с JSON в java коде

Давайте создадим новый класс в пакете network и назовём его JsonParser для преобразования Json -строк в необходимые нам объекты. Добавим в него один
метод, который назовём getUser(String response) :

Мы будем использовать этот метод внутри класса HttpClient , передавая в него ответ от сервера в формате String , возвращая объект User . Давайте
разберём преобразование, рассмотрим структура хранения JSON . В прошлом уроке мы в конце вывели ответ от сервера в log и увидели очень большой объект JSON .
На данном этапе нам необходимы только те поля, которые мы отображаем на экране. Поэтому опустим остальные поля и оставим только те, которые нам нужны:

Видим, что наш JSON полностью повторяет структуру нашего объекта User . Теперь можно приступить к парсингу (преобразованию) данных.

Первое, что необходимо сделать – это создать JSON объект из строки:

Видим, что AndroidStudio подчёркивает эту строку, указывая что надо обработать исключение или добавить его к сигнатуре метода. Можем нажать alt + enter
и увидеть два этих варианта решения проблемы. Добавим исключение к сигнатуре, чтобы обработать исключения в клиентском коде. Для этого выберем вариант Add exception to method signature :

Читать еще:  Основы компьютерных сетей. Тема №4. Сетевые устройства и виды применяемых кабелей

JSONObject представляет из себя структуру типа HashMap (ключ – значение).
Т.е. чтобы получить значения поля id нам необходимо выполнить вызов метода
userJson.getLong(«id») (получить значение типа long по ключу (названию поля) id ). Давайте сделаем тоже самое для каждого поля.
После этого метод будет выглядеть так:

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

Давайте создадим объект User , передав ему в конструктор все поля, которые мы только что достали из userJson :

Вот и всё! Теперь давайте добавим использование нашего класса внутри класса HttpClient .

Читаем XML файл на Java с помощью JDOM Parser

Я поначалу совсем не хотел останавливаться на том, что такое XML, но все-таки несколько слов сказать придется, чтобы те, кто про него услышали первый раз, прочитав эти строки, были в курсе основных идей.
По сути XML представляет собой обычный текст, который разделяется на логические группы с помощью специальных меток, которые называют “тэг”.
Тэг представляет собой слово, которое заключено в угловые скобки — например вот так:

Для того, чтобы начать группу вы указывает просто слово в скобках — еще раз повторим
Для окончание группы вы указываете такой же тэг, но слово предваряется символом “/”. Вот так:

В итоге группа внутри тэга test выглядит вот так:
Группа символов для тестирования

Тэги могу вкладываться один в другой — например вот так:

Группа символов для тестирования 01
Группа символов для тестирования 02
Группа символов для тестирования 03

Кроме вложений текста в тэгах можно указывать атрибуты — вот так:

Группа символов для тестирования 01

Назначение тэгов очень простое — надо отметить/выделить/сгруппировать какую-то информацию для того, чтобы потом ее можно было использовать. Это может быть список имен, список книг, список фирм, список вакансий и т.д.
Например, я хочу написать список контактов, с указанием имени, фамилии и e-mail. Можно сделать это так (но можно и по-другому — здесь все зависит от вашей фантазии и требований задачи):

Василий
Курочкин
vas@pisem.net

Георгий
Папанов
geogr@gmail.com

Семен
Баринов
barinov@yandex.ru

Не ищите тайного смысла — я просто сделал строку, в которой выделил нужные мне части — контакт (тэг contact) и внутри определил имя, фамилию и e-mail (тэги firstName, lastName, email). Также с помощью атрибута type я определи тип контакта — друг, коллега, однокурсник. Теперь просматривая строку я могу выделить нужные мне части информации. Это удобно и ничего более. Причем здесь больше удобства даже не для визуального восприятия (это спорно), а для программной обработки — достаточно несложно написать программу, которая найдет конкретные кусочки.

Теперь новичкам надо посмотреть какой-нибудь XML, чтобы увидеть больше примеров и убедиться, что в главном я прав 🙂 (хотя все в мире относительно).

Работа с XML

В первую очередь я хотел бы высказать свою позицию по поводу самого XML и уже на основе этого продолжать повествование.
Для меня XML — очень мощная технология, которая позволяет хранить, передавать и обрабатывать сложноструктурированные данные. Т.е. если я хочу иметь: список фирм с их телефонами и счетами, каталог книг с авторами и отзывами, описание структуры страниц сайта с комментариями, состояние всех автобусов в городе с их координатами, водителями, номерами и прочая — все это может быть удобно сохранено в виде XML и, что крайне важно и удобно, может быть передано в любую систему, которая написана на любой платформе — на .NET, PHP, Object C, Delphi, C++.
Проведите мысленный эксперимент — попробуйте написать строку, в которой передать информацию о своих контактах (где у одной персоны может быть несколько телефонов, e-mail, любимые книги, места работы, места учебы и … да хватит пока). Что важно — это должна быть обычная строка (несколько строк), которая позволяет разбирать эту информацию в ту структуру, которую я описал — класс Java. Там надо предусмотреть какие-то разделители, информацию об именах полей (группах полей). Попробуйте — и вы придете к чему-то подобному XML.

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

Итак, после всего вышесказанного мы видим, что нам приходит строковое представление чего-то важного в какой-то определенной структуре, которая требует наличия достаточно важных функций — нам же надо как-то работать с этой информацией. Не лежать же ей мертвым грузом. Функции достаточно очевидны:

  1. Разбор. Надо уметь разобрать строку на что-то более удобное для обработки — пытаться вставить внутрь строки или находить какое-то поле определенной записи из строки — это достаточно неудобно. Значит нам надо иметь некоторый набор классов для представления нашей строки в виде структуры объектов.
  2. Поиск. По структуре данных надо уметь что-то искать. Причем не подстроку, а какую-то группу полей, которые относятся к определенному объекту — например полная информация о книге — наименование, авторы, отзывы. Или список контактов с фамилией “Сидоров”.
  3. Проверка. Данные должны быть корректными, т.е. там должны быть только определенные поля, с определенным наполнением и они должны быть правильно скомпанованы в нашей строке.
  4. Преобразование. Хоть XML достаточно удобно описывает структурированные данные, это не значит, что его удобно просматривать обычному человеку или всегда удобно обрабатывать. Нередко для решения этого вопроса требуется преобразовать XML в какое-либо другое текстовое представление — например в тот же HTML (который является частным воплощением XML). Или даже в обычный текст.

В общем-то это все, что на мой взгляд наиболее важно. Нам надо уметь работать с информацией, которая записана в формате XML. Приступим к рассмотрению каждого пункта.

Разбор — Parsing

В слэнге программистов часто используется слова “парсинг”, который и обозначает разбор строки (или еще чего-нибудь) в какую-то структуру. Здесь надо выделить два момента:

  1. Разбор строки определенным алгоритмом
  2. Сохранение результатов разбора в какую-то структуру вместо строки — ибо со строкой многие операции делать просто неудобно.

Что касается второго пункта, то на сегодня существует по сути одна унифицированная структура, которая называется Document Object Model (DOM).
DOM представляет собой набор интерфейсов (и их реализаций), которые являются специализированными объектами для хранения “узлов” (node) XML-документа. По сути каждый тэг — это “узел” (нода — я буду использовать этот термин, т.к. очень привык). Информация внутри тэга — тоже нода. По сути любой разобранный XML — это набор элементов типа Node и еще более специализированных, построенных в дерево.
Почему дерево ? Да потому что у каждой ноды может быть список дочерних нод и у каждой из них тоже может быть “детки”. Так и строится дерево. Если вам сложно это увидеть, то советую посмотреть какую-либо классическую книгу по алгоритмам и структурам данных — можно старого доброго Никлауса Вирта «Алгоритмы и структуры данных». Книгу можно найти в интернете, ну или купить.

Давайте рассмотрим загрузку файла и редактирование построенного дерева на примере. Наша программа считывает XML-файл со списком книг и печатает их свойства. Сам XML-файл выглядит вот так:

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector