Xml.Document vs Xml.Tables, рекурсивный обход и слетевшая кодировка

#АнатомияФункций - Xml.Document



Всем привет!

В чат подкинули задачку про сбор данных из xml. Вроде всё просто, но пришлось повозиться с именами файлов, осуществить рекурсивный обход и оформить пару функций. По этому поводу код:

let

f=(x)=>Text.FromBinary(Text.ToBinary(x,866)),

g=(x)=>[a=Table.Buffer(x[[Name],[Value]]),

b=Table.SelectRows(a,(r)=>r[Value] is table),

c=Table.SelectRows(a,(r)=>not (r[Value] is table)),

d=if Table.RowCount(b)=0 then a else c & @g(Table.Combine(Table.ToList(b,h)))][d],

h=(x)=>Table.TransformColumns(x{1},{"Name",(r)=>x{0}&"/"&r}),



from = Folder.Files("C:\Users\muzyk\Desktop\XML_файлы")[[Name],[Content]],

tr = Table.TransformColumns(from,{{"Name",f},{"Content",(x)=>Record.FromTable(g(Xml.Document(x)))}}),

nms = List.Distinct(List.Combine(List.Transform(tr[Content],Record.FieldNames))),

to = Table.ExpandRecordColumn(tr,"Content",nms)

in

to




Ну а что тут к чему смотрите, как всегда, на Ютубе (https://youtu.be/OsfOCQZvBRM)



Лайк, коммент, подписка приветствуются )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik