Xml.Document – рекурсивный обход полей

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



Всем привет!

В чат закинули задачку на рекурсивный обход полей внутри Xml-документа.

Собственно, код:

let

lst = {"Name", "Value", "Attributes"},

f=(x,y)=>[

tr = Table.TransformColumns(x,{"Attributes",(x)=>if x is table then Record.FromTable(x) else []}),

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

nms1 = List.Buffer(Table.ColumnNames(tr)),

nms2 = List.Transform(nms,(x)=>if List.Contains(nms1,x) then x&Text.From(y) else x),

exp = Table.ExpandRecordColumn(tr,"Attributes",nms,nms2),

exp1 = Table.ExpandTableColumn(exp,"Value",lst,List.ReplaceValue(lst,"Name","Name"&Text.From(y),Replacer.ReplaceValue)),

res = if List.NonNullCount(exp1[Attributes]) = 0 then exp1 else @f(exp1,y+1)][res],





from = Xml.Document(File.Contents("C:\путь\Пример файла.xml"), 1251),

to = f(from,1)



in

to


Ну а что тут к чему смотрите, как всегда, на Ютубе



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



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

Всех благ!

@buchlotnik