Создание xml-файла средствами MS XML в TestComplete

№2-1,

технические науки

В данной статье мы рассмотрим каким образом можно встроенными средствами МS XML в TestComplete создать XML-файл. Зачем это нужно? Например, некоторая программа умеет загружать список продуктов в XML формате. Необходимо проверить правильность загрузки данного списка в этой программе.

Похожие материалы

В данной статье мы рассмотрим каким образом можно встроенными средствами М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>