Импорт из XML-файлов со смешанной структурой

Задача ETL позволяет импортировать данные из XML-файлов, если значения сформированы в одном из двух видов:

Иногда может возникнуть ситуация, когда XML-файл имеет смешанную структуру, и часть необходимых данных будет расположена в дочерних вершинах, а часть в атрибутах вершин. В такой ситуации написать необходимый XPath-запрос не получится. Импорт из XML-файла со смешанной структурой можно произвести, используя макрос на Fore и объект задачи Etl - Источник пользователя. Рассмотрим пример импорта из XML-файла со смешанной структурой.

Структура импортируемого файла:

Data.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;

Наименование данного класса необходимо указать в настройках источника пользователя.

См. также:

Примеры