XML – это расширяемый язык разметки. Он предназначен для структурирования, хранения и передачи данных. XML файл состоит из тегов, но сами теги не предопределены языком, их нужно определять самим. Структура файла так же не предопределена и может быть любой.
Создание xml документа
Поскольку теги в xml файлах определяются самим разработчиком, то следует соблюдать следующие правила наименований:
— пробелы в наименованиях не используются
— все наименование начинаются с буквы, после чего можно использовать цифры и другие допустимые символы
— регистр не учитывается
В xml файле первой строкой может быть указана декларация xml, она является не обязательной. В ней может быть указана версия и кодировка:
<?xml version="1.0" encoding="utf-8"?>
В xml файле корневой элемент должен быть только один, он будет являться своего рода оболочкой документа.
XmlDocument document = XmlDocument::newBlank();
XmlElement header;
//создание корневого элемента
header = document.createElement("pen");
...
//добавление корневого элемента в документ
document.appendChild(header);
//сохранение документа во внешний файл
document.save("c:\\pen.xml");
Все остальные элементы будут вложенными в корневой элемент, так же у вложенных элементов могут быть свои вложенные элементы и т.д.
XmlElement item;
...
//создание вложенного элемента
item = document.createElement("type");
item.innerText("ballpoint");
//добавление элемента в корневой элемент
header.appendChild(item);
...
У элементов есть возможность хранения параметров, они называются атрибутами. Атрибут представляет собой конструкцию из двух элементов, имя и значение. В элементе может быть любое количество атрибутов.
XmlElement item;
XmlElement details;
...
details = document.createElement("details");
item = document.createElement("detail");
//создание атрибута
item.setAttribute("name", "case");
item.setAttribute("material", "plastic");
details.appendChild(item);
...
Полностью код создания xml файла
XmlDocument document = XmlDocument::newBlank();
XmlElement header;
XmlElement item;
XmlElement details;
XmlNode node;
header = document.createElement("pen");
item = document.createElement("type");
item.innerText("ballpoint");
header.appendChild(item);
details = document.createElement("details");
item = document.createElement("detail");
item.setAttribute("name", "case");
item.setAttribute("material", "plastic");
details.appendChild(item);
item = document.createElement("detail");
item.setAttribute("name", "stick");
item.setAttribute("material", "plastic");
item.setAttribute("composition", "ink");
details.appendChild(item);
header.appendChild(details);
node = document.createNode(XmlNodeType::Element, "description", "");
node.innerText("write text on paper");
header.appendChild(node);
document.appendChild(header);
document.save("c:\\pen.xml");
XML файл полученный в результате выполнения кода
<?xml version="1.0" encoding="utf-8"?>
<pen>
<type>ballpoint</type>
<details>
<detail name="case" material="plastic" />
<detail name="stick" material="plastic" composition="ink" />
</details>
<description>write text on paper</description>
</pen>
Чтение xml файла
Для того чтобы произвести чтение/парсинг xml файла, нужно его создать, либо из внешнего файла, либо из строки xml.
XmlDocument document = XmlDocument::newBlank();
//загрузка из внешнего файла
document.load("c:\\pen.xml");
//создание из строки xml
document.loadXml("...");
После этого получаем корневой элемент из документа. Из корневого элемента можем получить вложенный элемент, из вложенного элемента свой вложенный элемент и т.д.
XmlElement header;
XmlNode node;
...
//корневой элемент
header = document.getNamedElement("pen");
//вложенный элемент
node = header.getNamedElement("details");
...
Если элемент имеет внутри себя вложенные элементы в виде списка, то для упрощения обработки вложенных элементов можно использовать объект, представляющий собой коллекцию элементов, для обработки в цикле
XmlNodeList nodeList;
int i;
...
//получаем коллекцию элементов
nodeList = document.getElementsByTagName("detail");
while (i < nodeList.length())
{
//получаем элемент из коллекции
item = nodeList.item(i);
...
i++;
}
Получить значение атрибута
item.getAttribute("name");
Получить значение элемента/тега
item.text();
Все комментарии
Чтобы оставить комментарий, необходимо войти или зарегистрироваться.
Пока нет комментариев. Будьте первым!