Dear useRs, I have a simple/RTFM question about XML parsing. Given an XML file, such as (fragment) <A>100</A> <B>23</B> <C>true</C> how do I import it in a data frame or list, so that the values (100, 23, true) can be accessed through the names A, B and C? I installed the XML package and looked over the documentation... however after 20 minutes and a couple of tests I still don't know what I should start with. Can someone provide an example or point me to the appropriate function(s)? Thank you, b.
bogdan romocea <br44114 <at> yahoo.com> writes: : : Dear useRs, : : I have a simple/RTFM question about XML parsing. Given an XML file, : such as (fragment) : <A>100</A> : <B>23</B> : <C>true</C> : how do I import it in a data frame or list, so that the values (100, : 23, true) can be accessed through the names A, B and C? : : I installed the XML package and looked over the documentation... : however after 20 minutes and a couple of tests I still don't know what : I should start with. : : Can someone provide an example or point me to the appropriate : function(s)? : You could check out the ctv package that was recently announced. It uses XML so its source would provide an example. If its a one-time operation, Excel reads XML and you could then use one of the many Excel to R possibilities.
Gabor Grothendieck wrote:> > You could check out the ctv package that was recently announced. > It uses XML so its source would provide an example. > > If its a one-time operation, Excel reads XML and you could then > use one of the many Excel to R possibilities.For an xml file like this: <?xml version="1.0"?> <variables> <a>100</a> <b>23</b> <z>666</z> </variables> its a one-liner with the XML package (library(XML)): xmlReadSimple <- function(xmlFile){ as.list(xmlSApply(xmlRoot(xmlTreeParse(xmlFile)),xmlValue)) } add an lapply(...,as.numeric) for conversion to numbers. sweet. Baz
I managed to parse more complex XML files as well. The trick was to manually determine the position of the child nodes of interest, after which they can be parsed in a loop. For example: require(XML) doc <- xmlTreeParse("file.xml",getDTD=T,addAttributeNamespaces=T) r <- xmlRoot(doc) #find the nodes of interest r[[i]][[j]].... #then read them xmldata <- list(NULL) for (i in 1:xmlSize(r[[2]][[1]])) { xmldata[[i]] <- as.data.frame(xmlSApply(r[[2]][[1]][[i]],xmlValue)) } --- Barry Rowlingson <B.Rowlingson at lancaster.ac.uk> wrote:> Gabor Grothendieck wrote: > > > > > You could check out the ctv package that was recently announced. > > It uses XML so its source would provide an example. > > > > If its a one-time operation, Excel reads XML and you could then > > use one of the many Excel to R possibilities. > > For an xml file like this: > > <?xml version="1.0"?> > <variables> > <a>100</a> > <b>23</b> > <z>666</z> > </variables> > > its a one-liner with the XML package (library(XML)): > > xmlReadSimple <- > function(xmlFile){ > as.list(xmlSApply(xmlRoot(xmlTreeParse(xmlFile)),xmlValue)) > } > > add an lapply(...,as.numeric) for conversion to numbers. > > sweet. > > Baz > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > > > __________________________________________________