Создание XML-файла средствами MS XML в TestComplete
В данной статье мы рассмотрим каким образом можно встроенными средствами МS XML в TestComplete создать XML-файл. Зачем это нужно? Например, некоторая программа умеет загружать список продуктов в XML формате. Необходимо проверить правильность загрузки данного списка в этой программе. Допустим список у нас хранится в ODT. Как это сделать я уже писал в своей статье Основы работы с ODT в TestComplete, поэтому я не буду на этом останавливаться.
Структура класса Item в ODT:
- Name (Название продукта);
- Number (Количество);
- Volume (Объем);
- Type (Тип).
Элемент типа Array со значениями в ODT:
- item0:
- Name: Молоко;
- Number: 1;
- Volume: 0.5.
- item1:
- Name: Хлеб;
- Number: 1.
- item2:
- Name: Мясо;
- Volume: 1;
- Type: Говядина.
- item3:
- Name: Рис;
- Volume: 1;
- item4:
- Name: Греча;
- Volume: 1;
- item5:
- Name: Яблоки;
- Volume: 1;
Для создания XML-файла необходимо прописать следующие строки:
Obj := Sys.OleObject('Msxml2.DOMDocument'); // Инициализируем DOM-объект
Obj.async := false; // Отключаем ассинхронный режим
Obj.Save('D:/filename.xml'); // Сохраняем файл
Мы научились создавать XML-файл. Это просто. Теперь добавим в него наши данные.
Для начала нужно добавить инструкции XML, которая содержит информацию о версии XML и кодировке данного XML-файла:
Instruction := Obj.CreateProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
Obj.AppendChild(Instruction);Метод AppendChild предназначен для добавления узла. В дальнейшем мы будем активно использовать данный метод.
Теперь добавим корневой элемент list, для этого воспользуемся методом CreateElement, который создает элемент.
List := Оbj.CreateElement('list');
Obj.AppendChild(List);Следующим шагом добавим список продуктов из ODT:
for i := 0 to Self.Count - 1 do begin Node := Оbj.CreateElement(Self.Items(i).Value.Name); List.AppendChild(Node); end;
А также добавим параметры для каждого элемента списка, для этого будем использовать метод SetAttribute:
if Length(Self.Items(i).Value.Number) > 0 then Node.SetAttribute(Self.Items(i).Value.Number); if Length(Self.Items(i).Value.Volume) > 0 then Node.SetAttribute(Self.Items(i).Value.Volume); if Length(Self.Items(i).Value.Type) > 0 then Node.SetAttribute(Self.Items(i).Value.Type);
В завершении объединим все куски кода:
Obj := Sys.OleObject('Msxml2.DOMDocument');
Obj.async := false;
Instruction := Obj.CreateProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
Obj.AppendChild(Instruction);
List := Оbj.CreateElement('list');
Obj.AppendChild(List);
for i := 0 to Self.Count - 1 do begin
Node := Оbj.CreateElement(Self.Items(i).Value.Name);
if Length(Self.Items(i).Value.Number) > 0 then
Node.SetAttribute(Self.Items(i).Value.Number);
if Length(Self.Items(i).Value.Volume) > 0 then
Node.SetAttribute(Self.Items(i).Value.Volume);
if Length(Self.Items(i).Value.Type) > 0 then
Node.SetAttribute(Self.Items(i).Value.Type);
List.AppendChild(Node);
end;
Obj.Save('D:/filename.xml');В итоге должно получиться, что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?> <list> <item number="1" volume="0.5">Молоко</item> <item number="1">Хлеб</item> <item volume="1" type="Говядина">Мясо</item> <item volume="1">Рис</item> <item volume="1">Греча</item> <item volume="1">Яблоки</item> </list>
Комментировать