Задача ETL позволяет импортировать данные из XML-файлов, если значения сформированы в одном из двух видов:
Поля располагаются в дочерних вершинах;
Поля располагаются в атрибутах вершины.
Иногда может возникнуть ситуация, когда XML-файл имеет смешанную структуру, и часть необходимых данных будет расположена в дочерних вершинах, а часть в атрибутах вершин. В такой ситуации написать необходимый XPath-запрос не получится. Импорт из XML-файла со смешанной структурой можно произвести, используя макрос на Fore и объект задачи Etl - Источник пользователя. Рассмотрим пример импорта из XML-файла со смешанной структурой.
Структура импортируемого файла:
Класс с реализацией метода Fetch, который импортирует данные:
Class UserProvider: Object, IDtRecordsetProvider
Public Function Fetch: Array Of Variant;
Var
Xml: IXmlDomDocument;
Nodes, ChildNodes: IXmlDomNodeList;
Node: IXmlDomNode;
Date, Val1, Val2: Variant;
Result: Array Of Variant;
i: integer;
Begin
Xml := New DOMDocument.Create;
Xml.load("c:\Data.xml");
Nodes := Xml.getElementsByTagName("Data").item(0).childNodes;
Result := New Variant[Nodes.length, 3];
For i := 0 To Nodes.length - 1 Do
Node := Nodes.item(i);
Date := Node.attributes.getNamedItem("Date").nodeTypedValue;
ChildNodes := Node.childNodes;
Val1 := ChildNodes.item(0).nodeTypedValue;
Val2 := ChildNodes.item(1).nodeTypedValue;
Result[i, 0] := Date;
Result[i, 1] := Val1;
Result[i, 2] := Val2;
End For;
Return Result;
End Function Fetch;
End Class UserProvider;
Наименование данного класса необходимо указать в настройках источника пользователя.
См. также: