Home > Back-end >  Read XML file in R tranforming each line in column
Read XML file in R tranforming each line in column

Time:08-27

I have a XML file with the following structure:

<?xml version="1.0" encoding="ISO-8859-1"?>
<LIST_ORDER>
    <file>
        <order>
            <param name="Col1" value="A"/>
            <param name="Col2" value="B"/>
            <param name="Col3" value="C"/>
        </order>
    </file>
</LIST_ORDER>

I need to import it into R and transform in a dataframe. The desired output is as follows:

Col1 | 
A

Col2 |
 B 

Col3 |
C

Is there a function or method to accomplish that ?

Appreciate any help

CodePudding user response:

You can use the xml2 package. Read in the xml with read_xml, identify the "param" nodes using xml_find_all, then you can harvest the attribute values with xml_attr

library(xml2)

params <- read_xml(my_xml) |> xml_find_all(xpath = "//param")

data.frame(name = xml_attr(params, "name"), value = xml_attr(params, "value"))
#>   name value
#> 1 Col1     A
#> 2 Col2     B
#> 3 Col3     C

Note that my_xml can either be a path to your xml file, or the xml as a string. In this example I used:

my_xml <- '<?xml version="1.0" encoding="ISO-8859-1"?>
            <LIST_ORDER>
              <file>
                <order>
                  <param name="Col1" value="A"/>
                  <param name="Col2" value="B"/>
                  <param name="Col3" value="C"/>
                </order> 
              </file>
             </LIST_ORDER>'

Created on 2022-08-26 with reprex v2.0.2

  •  Tags:  
  • r xml
  • Related