Forum Discussion
Import multiple XML files
Is it possible to use the import from folder for multiple XML files? I have manged to extract the data I need from a single XML file using "import from XML" but not with the files from folder. Thank you!
- Anonymous10 years ago
The way I usually do it is with 2 queries: a folder query to get the paths/names of the files, and a function query to parse them.
Steps:
- Query the folder where your XML files are
- Add a column that combines the path and file name to make an absolute path to the XML file and call it [Path]
- Create an XML query to one of the XML files in the folder
- Open advanced editor and create a parameter by adding (path as text) => at the top
- Replace the path specified inside Folder.Files() to path
- Close the advanced editor and name the query "getXML"
- In the Folder Query, add a custom column and call the getXML function by stating getXML([Path])
- Close and Load
XML Parse Function Query
let Source = Folder.Files("C:\XML Files"), #"Removed Other Columns" = Table.SelectColumns(Source,{"Name", "Folder Path"}), #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "Path", each [Folder Path] & [Name]), #"Added Custom1" = Table.AddColumn(#"Added Custom", "XML Data", each getXML([Path])), #"Expanded XML Data" = Table.ExpandTableColumn(#"Added Custom1", "XML Data", {"TITLE", "ARTIST", "COUNTRY", "COMPANY", "PRICE", "YEAR"}, {"TITLE", "ARTIST", "COUNTRY", "COMPANY", "PRICE", "YEAR"}) in #"Expanded XML Data"Folder Query
(path as text) => let Source = Xml.Tables(File.Contents(path)), Table0 = Source{0}[Table], #"Changed Type" = Table.TransformColumnTypes(Table0,{{"TITLE", type text}, {"ARTIST", type text}, {"COUNTRY", type text}, {"COMPANY", type text}, {"PRICE", type number}, {"YEAR", Int64.Type}}) in #"Changed Type"Message me if you would like an example PBIX file that does this
Alex
13 Replies
- AnonymousNot applicable
The way I usually do it is with 2 queries: a folder query to get the paths/names of the files, and a function query to parse them.
Steps:
- Query the folder where your XML files are
- Add a column that combines the path and file name to make an absolute path to the XML file and call it [Path]
- Create an XML query to one of the XML files in the folder
- Open advanced editor and create a parameter by adding (path as text) => at the top
- Replace the path specified inside Folder.Files() to path
- Close the advanced editor and name the query "getXML"
- In the Folder Query, add a custom column and call the getXML function by stating getXML([Path])
- Close and Load
XML Parse Function Query
let Source = Folder.Files("C:\XML Files"), #"Removed Other Columns" = Table.SelectColumns(Source,{"Name", "Folder Path"}), #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "Path", each [Folder Path] & [Name]), #"Added Custom1" = Table.AddColumn(#"Added Custom", "XML Data", each getXML([Path])), #"Expanded XML Data" = Table.ExpandTableColumn(#"Added Custom1", "XML Data", {"TITLE", "ARTIST", "COUNTRY", "COMPANY", "PRICE", "YEAR"}, {"TITLE", "ARTIST", "COUNTRY", "COMPANY", "PRICE", "YEAR"}) in #"Expanded XML Data"Folder Query
(path as text) => let Source = Xml.Tables(File.Contents(path)), Table0 = Source{0}[Table], #"Changed Type" = Table.TransformColumnTypes(Table0,{{"TITLE", type text}, {"ARTIST", type text}, {"COUNTRY", type text}, {"COMPANY", type text}, {"PRICE", type number}, {"YEAR", Int64.Type}}) in #"Changed Type"Message me if you would like an example PBIX file that does this
Alex- sseRegular Visitor
Great, thank you! I got it to work now. Excellent.
- amienHelper V
Edit : Nevermind .. i got it working
Can you upload the pbix as example Alex? Thanks
- amienHelper V
Hi Alex, could you share the pbix please?
- AnonymousNot applicable
Hi
what if i need to import from a folder some xlsb files with the same structure but i what to import only one worksheet?
Many many thanks!
- PowerBIGuyResponsive Resident
I just tested this and it worked for me.
Cheers
- sseRegular Visitor
The "from XML" and "from folder gives different output and I am not able to nest out the relevant data in "from folder"
From XML
let
Source = Xml.Tables(File.Contents("C:\337.xml")),
Table0 = Source{0}[Table],
Table1 = Table0{1}[Table],
#"Changed Type" = Table.TransformColumnTypes(Table1,{{"Id", Int64.Type}, {"LglSeqNb", Int64.Type}, {"CreDtTm", type datetime}})
in
#"Changed Type"From Folder
Source = Folder.Files("W:\XML folder")
- sseRegular Visitor
Is it possible to combine Source = Xml.Tables and Source = Folder.Files ?