Створюємо, модифікуємо xml документи за допомогою java dom, dev64

Я вже писав якось про форматування XML. Для форматування використовувалася DOM-модель, XML перетворювався в DOM-документ і форматувався за допомогою бібліотеки Apache Xerces. Сьогодні я використовую код форматування для налагодження. Справа в тому, що я збираюся зайнятися експериментами з XML-е-будовою. Тобто я буду програмно створювати DOM-документ і виводити його у вигляді XML ... Навіщо це потрібно? Здавалося б є безліч чудових засобів для роботи з XML. Однак більшість засобів дозволяють лише парсити XML в якусь заздалегідь сгенерированную модель або виводити готову модель у вигляді XML-файла.

Мені ж потрібно динамічно змінювати XML. Тобто потрібно щоб XML документ динамічно змінювався в процесі виконання програми. Операції, що виконуються над XML-файлом повинні впливати на наступні операції програми ... Для цього я збираюся задіяти XPath API. Але це поки справа майбутнього. Зараз займемося для початку елементарними експериментами. Для початку візьмемо з вищезгаданої статті клас для форматування XML.

Додаю в залежності Maven бібліотеку Apache Xerces, використану для форматування і junit, щоб робити unit-тести.

Додавання елемента в DOM документ

Перші три рядки вищенаведеного тексту створюють новий документ, строчки

створюють кореневої елемент XML-документа з ім'ям root.

Трохи теорії. В DOM-моделі документ складається з вузлів (Nodes) різних типів:

По-крайней технологія XPath підтримує такі типи вузлів, а призначена вона для роботи з DOM-документами. Як видно вище елемент - це звичайний тег XML-документа. Атрибути виглядають так, як у наведеному нижче документі. lang - атрибут зі значенням «xml».

Спробуємо додати нашому документу з першого прикладу атрибут.

Тестую, отримую несподівану помилку:

Виявляється є окрема функція встановлює для елемента атрибут.

Додавання атрибута елементу

Виклик root.setAttribute ( «lang», «en») додає атрибут c ім'ям lang і значенням «en» елементу root:

Додавання дочірнього елемента

Щоб перевірити як Парс документ з CDATA секцією, додаю ще один тест:

Cтрочкой коду нижче перетворю створений XML документ в рядок, потім назад
в DOM-модель і знову в рядок рядок ... і виводжу у вигляді рядка.


String result = XmlUtil.toXML (XmlUtil.fromXML (XmlUtil.toXML (document)));

Секція CDATA розпарсити нормально.

Схожі статті