如何将XML数据转换为data.frame?

我正在学习R的XML包。 我试图从books.xml示例xml数据文件创build一个data.frame。 这是我得到的:

 library(XML) books <- "http://www.w3schools.com/XQuery/books.xml" doc <- xmlTreeParse(books, useInternalNodes = TRUE) doc xpathApply(doc, "//book", function(x) do.call(paste, as.list(xmlValue(x)))) xpathSApply(doc, "//book", function(x) strsplit(xmlValue(x), " ")) xpathSApply(doc, "//book/child::*", xmlValue) 

这些xpathSApply中的每一个都不会让我接近我的意图。 应该如何进行一个良好的数据框?

One Solution collect form web for “如何将XML数据转换为data.frame?”

通常,我会build议尝试xmlToDataFrame()函数,但我相信这实际上是相当棘手的,因为它不是很好的结构开始。

我会build议使用这个function:

 xmlToList(books) 

一个问题是,每本书有多个作者,所以当你构build数据框架时,你需要决定如何处理。

一旦你决定了如何处理多个作者问题,那么使用plyr中的ldply()函数将你的书籍列表变成一个数据框是相当直接的(或者只是使用lapply并将返回值转换为data.frame通过使用do.call(“rbind”…)。

这是一个完整的例子(不包括作者):

 library(XML) books <- "w3schools.com/xsl/books.xml" library(plyr) ldply(xmlToList(books), function(x) { data.frame(x[!names(x)=="author"]) } ) .id title.text title..attrs year price .attrs 1 book Everyday Italian en 2005 30.00 COOKING 2 book Harry Potter en 2005 29.99 CHILDREN 3 book XQuery Kick Start en 2003 49.99 WEB 4 book Learning XML en 2003 39.95 WEB 

以下是作者所包含的内容。 你需要在这个实例中使用ldply ,因为这个列表是“锯齿状的”… lapply无法正确处理。 (否则你可以用lapply (也是Hadley提供的)使用lapply ,但是为什么plyr自动为你做这件事呢?]:

 ldply(xmlToList(books), data.frame) .id title.text title..attrs author year price .attrs 1 book Everyday Italian en Giada De Laurentiis 2005 30.00 COOKING 2 book Harry Potter en J K. Rowling 2005 29.99 CHILDREN 3 book XQuery Kick Start en James McGovern 2003 49.99 WEB 4 book Learning XML en Erik T. Ray 2003 39.95 WEB author.1 author.2 author.3 author.4 1 <NA> <NA> <NA> <NA> 2 <NA> <NA> <NA> <NA> 3 Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 4 <NA> <NA> <NA> <NA> 
  • InflateException:二进制XML文件行#1:由于OutOfMemoryError引起的类错误
  • 如何将空格字符放入XML中的string名称?
  • 如何使用XPath包含()在这里?
  • XML - 根级别的数据无效
  • 值等于dimens.xml中的match_parent或fill_parent?
  • 在没有XML容器元素的情况下反序列化成List
  • Android中的strings.xml文件出错
  • content_main.xml和activity_main.xml之间的区别?
  • 用于Python的XML编写工具
  • 删除TabLayout中的换行符
  • 从XML模式生成Json模式(XSD)