# Работа с XML файлами

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

Существуют разные библиотеки для работы с XML документами. Мы остановимся на средствах, которые входят в стандартную JDK, а именно на DOM — Document Object Model.

Так что же такое DOM? Судя из названия это есть объектная модель документа. XML документ представляет собой набор тегов — узлов. Каждый узел может иметь неограниченное количество дочерних узлов. Каждый дочерний тоже может содержать много-много потомков или не содержать их вовсе. Так вот DOM представляет собой всё это дерево в виде специальных объектов Node. Каждый Node соответствует своему XML-тегу. Таким образом, получается некое дерево. На самой вершине этой иерархии находится Document.

Для того, чтобы получить объект Document для нашего XML-файла необходимо выполнить следующий код.

```
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setValidating(false);
DocumentBuilder builder = f.newDocumentBuilder();
Document doc = builder.parse(new File("test.xml"));
```

Можно получить список дочерних узлов при помощи метода getChildNodes.

```
NodeList methodNodes = node.getChildNodes();
```

Вот так можно пробежаться по всем дочерним узлам текущего узла:

```
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
     Node node = children.item(i);
}
```

С помощью getAttributes получается NamedNodeMap, который содержит атрибуты узла. Вот так можно получить значение атрибута «name»:

```
NamedNodeMap attributes = node.getAttributes();
Node nameAttrib = attributes.getNamedItem("name");
String name = nameAttrib.getNodeValue();
```

Вопрос 1.

В чем преимущество хранения данных в XML-формате, перед обычным текстовым форматом?

Вопрос 2.

Каким образом можно записать данные какого-либо объекта в XML-файл?


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://comaqa.gitbook.io/java-automation/rabota-s-failami/rabota-s-xml-failami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
