Forum Discussion

sse's avatar
sse
Regular Visitor
10 years ago
Solved

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!

  • Anonymous's avatar
    Anonymous
    10 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:

    1. Query the folder where your XML files are
    2. Add a column that combines the path and file name to make an absolute path to the XML file and call it [Path]
    3. Create an XML query to one of the XML files in the folder
    4. Open advanced editor and create a parameter by adding (path as text) => at the top
    5. Replace the path specified inside Folder.Files() to path
    6. Close the advanced editor and name the query "getXML"
    7. In the Folder Query, add a custom column and call the getXML function by stating getXML([Path])
    8. 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

  • Anonymous's avatar
    Anonymous
    Not 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:

    1. Query the folder where your XML files are
    2. Add a column that combines the path and file name to make an absolute path to the XML file and call it [Path]
    3. Create an XML query to one of the XML files in the folder
    4. Open advanced editor and create a parameter by adding (path as text) => at the top
    5. Replace the path specified inside Folder.Files() to path
    6. Close the advanced editor and name the query "getXML"
    7. In the Folder Query, add a custom column and call the getXML function by stating getXML([Path])
    8. 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

    • sse's avatar
      sse
      Regular Visitor

      Great, thank you! I got it to work now. Excellent.

      • amien's avatar
        amien
        Helper V

         

        Edit : Nevermind .. i got it working

         

        Can you upload the pbix as example Alex? Thanks

         

         

    • amien's avatar
      amien
      Helper V

      Hi Alex, could you share the pbix please?

    • Anonymous's avatar
      Anonymous
      Not 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!

    • sse's avatar
      sse
      Regular 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")

      • sse's avatar
        sse
        Regular Visitor

        Is it possible to combine Source = Xml.Tables and Source = Folder.Files ?