How to convert a partly nested XML to data frame using xml2

Hi,

Using dplyr is the tidiest option :stuck_out_tongue:

library(XML)
library(dplyr)

xml_doc <-"
<DATA>

   <RECORD>
       <VAR1>string1</VAR1>
       <VAR2>1</VAR2>
       <VAR3>2.3</VAR3>
       <VAR4>TRUE</VAR4>
   </RECORD>

   <RECORD>
       <VAR1>string2</VAR1>
       <VAR2>2</VAR2>
       <VAR3>3.4</VAR3>
       <VAR4>FALSE</VAR4>
   </RECORD>

   <RECORD>
       <VAR1>string3</VAR1>
       <VAR2>3</VAR2>
       <VAR3>4.5</VAR3>
       <VAR4>TRUE</VAR4>
   </RECORD>

</DATA>"

myXML = xmlParse(xml_doc)
myData = xmlToDataFrame(myXML, stringsAsFactors = FALSE,) %>% 
                        mutate_all(~type.convert(., as.is = T))
'data.frame':	3 obs. of  4 variables:
 $ VAR1: chr  "string1" "string2" "string3"
 $ VAR2: int  1 2 3
 $ VAR3: num  2.3 3.4 4.5
 $ VAR4: logi  TRUE FALSE TRUE

Set the as.is to FALSE if you prefer factors instead of strings

Hope this is what you're looking for...
PJ

1 Like