Собрать кредитную историю

Приближается конец моего года в скоринге и одна из вещей, в которой мне пришлось убедиться: каждый рано или поздно встретится с кредитной историей.
Проблема в том, что часто ответы (одного из) БКИ не хранятся в таблицах, а лежат где-то на сервере в виде груды xml- файлов. Даже если данные БКИ храняться в готовых таблицах получить доступ к исходной информации, пересобрать и сверить – дело благородное, так как часто ответственность за решения, которые принимаются на этих данных лежит на аналитике.
Для подкованного человека, имеющего представление о том, что такое «парсить XML», задача, допустим, плёвая, однако не такая простая для остальных. Допустим мы не имеем представления о том, как работать с xml и просто хотим получить единую таблицу, годную для анализа.
У меня есть два рецепта: для VBA (Excel есть всюду) и для Mathematica.
Не могу сказать, что они очень быстрые – каждый занимает время примерно одного обеденного перерыва (для объемов в 10-20 тысяч файлов), но это много быстрее альтернативного варианта с привлечением вечно занятых айтишников.

Способ VBA
Шаг 0.
Мы предполагаем, что все файлы находятся в одной папке.
Для начала откроем Excel. В окне VBAEditor (Alt+F11) Tools/References… и поставим галочку напротив “Microsoft Scripting Runtime”.
Объявим несколько переменных:
Dim irow
Dim acwb As Worksheet
Path=”C:env” ‘ к примеру
Dim thisBook as Workbook
Шаг 1.
Создаем список файлов лежащих в одной директории на первом листе рабочей книги:
Sub listfiles()
Set thisBook=ActiveWorkbook
Set acwb = thisBook.Worksheets(“listRusStd”)
irow = 1
Call listmyfiles(Path)
End Sub
Sub listmyfiles(mysourcepath)
Set myobject = New Scripting.FileSystemObject
Set mysource = myobject.GetFolder(Path)
On Error Resume Next
For Each myfile In mysource.Files
icol = 2
acwb.Cells(irow, icol).Value = myfile.Path
icol = 3
acwb.Cells(irow, icol).Value = myfile.Name
irow = irow + 1
Next
End Sub
Шаг 2.
Теперь, когда у нас есть весь список файлов, мы можем поочередно открыть и скопировать содержимое на лист.
Sub openANDcopyXML()
‘openANDcopyXML Macro
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Dim listDATA, listADD, xmlSheet As Worksheet
Set listDATA = Workbooks(“parse.xls”).Worksheets(“dataRusStd”)
Set listADD = Workbooks(“parse.xls”).Worksheets(“listRusStd”)
lstRowMain = (listADD.Range(“B” & Rows.Count).End(xlUp).Row)
For i = 1 To lstRowMain
lstRowData = (listDATA.Range(“A” & Rows.Count).End(xlUp).Row)
Path = listADD.Range(“B” & i).Value
Workbooks.OpenXML Filename:=Path, LoadOption:=xlXmlLoadImportToList
lstRowXML = (Range(“A” & Rows.Count).End(xlUp).Row)
Set xmlSheet = ActiveSheet
If lstRowXML = 1 Then
xmlSheet.Range(Cells(1, 1), Cells(1, 100)).Copy Destination:=listDATA.Cells(lstRowData + 1, 1)
ActiveWorkbook.Close False
Else
xmlSheet.Range(Cells(2, 1), Cells(Range(“A” & Rows.Count).End(xlUp).Row, 100)).Copy Destination:=listDATA.Cells(lstRowData + 1, 1)
ActiveWorkbook.Close False
End If
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Все данные из XML на одном листе. Из-за структуры моих файлов, приходится делать неколько небольших коррекций, которые наверное более-менее индивидуальны.

Способ Mathematica
Подход в Mathematica показался мне более элегантным и понятным.
Задаем папку в которой находятся файлы.
adSetDirectory[“****”];
Получаем список находящихся внутри файлов:
flNames = FileNames[];
Импортируем все данные из находящихся в папке файлов:
hugeXML = Import[FileNameJoin[{Directory[], #}],
“XML”] & /@ flNames;
Импортируем все данные из находящихся в папке файлов (эта операция займет основную часть времени):
hugeXML = Import[FileNameJoin[{Directory[], #}],
“XML”] & /@ flNames;
Упаковываем все найденное в один большой файл данных:
packXML=XMLObject[“Document”][{XMLObject[“Declaration”][“Version”®”1.0″,”Encoding”®”UTF-8”]},XMLElement[“list”,{},hugeXML[[All,-2]]],{}];
И экспортируем его в требуемое место:
Export[FileNameJoin[{Directory[],”packSMALL.xml”}],packXML];

В результате получили единую таблицу с данными, которую легко использовать. Далее мне нужно было импортировать данные в SAS, но здесь наверное пути расходяться.
Кому-нибудь известны хорошие быстрые способы, которые можно воплотить обычными средствами?

Собрать кредитную историю