将xml/html文档中的元素强制转换为data.frame

将xml/html文档中的元素强制转换为data.frame,r,xml,rvest,R,Xml,Rvest,假设您有一个R格式的文档,格式如下: <grp> <elementx> <sub_a>a</sub_a> <sub_b>b</sub_b> <sub_c>c</sub_c> </elementx> <elementx> <sub_a>1</sub_a> <sub_b>2</sub_b> <sub_c&

假设您有一个R格式的文档,格式如下:

<grp>
<elementx>
  <sub_a>a</sub_a>
  <sub_b>b</sub_b>
  <sub_c>c</sub_c>
</elementx>
<elementx>
  <sub_a>1</sub_a>
  <sub_b>2</sub_b>
  <sub_c>3</sub_c>
</elementx>
</grp>

它不是一个html表,但由于所有元素都共享相同的简单内部格式,我们应该能够将它们视为一个表。

对于已经处于这种简单结构中的xml,可以使用xml包中的
xmlToDataFrame()
轻松转换它,如下所示:

library(XML)

xmlstr <- 
"<grp>
  <elementx>
    <sub_a>a</sub_a>
    <sub_b>b</sub_b>
    <sub_c>c</sub_c>
  </elementx>
  <elementx>
    <sub_a>1</sub_a>
    <sub_b>2</sub_b>
    <sub_c>3</sub_c>
  </elementx>
</grp>"  

df <- xmlToDataFrame(xmlstr)
df
#  sub_a sub_b sub_c
#1     a     b     c
#2     1     2     3
库(XML)

xmlstr对于已经处于这种简单结构中的xml,可以使用xml包中的
xmlToDataFrame()
轻松转换它,如下所示:

library(XML)

xmlstr <- 
"<grp>
  <elementx>
    <sub_a>a</sub_a>
    <sub_b>b</sub_b>
    <sub_c>c</sub_c>
  </elementx>
  <elementx>
    <sub_a>1</sub_a>
    <sub_b>2</sub_b>
    <sub_c>3</sub_c>
  </elementx>
</grp>"  

df <- xmlToDataFrame(xmlstr)
df
#  sub_a sub_b sub_c
#1     a     b     c
#2     1     2     3
库(XML)

xmlstr注意data.frame列的元素必须具有相同的类型。因此,列中的数字将转换为字符类型。我想这就是你想要的?您是否尝试过@dww提到的
xmlToDataFrame()
,您的XML是一个简单的结构,可以使用XML包的xmlToDataFrame:
df处理,谢谢。我遇到一个错误
无法为签名“xml\u nodeset”的函数“xmlToDataFrame”找到继承的方法
。知道我做错了什么吗?您正在合并包。rvest的
read_html()
输出可能与对象在
xmlToDataframe()
中使用的XML的
xmlParse()
不一致。考虑只使用XML来满足这个简单的需要。注意DATA框架列的元素必须是相同类型的。因此,列中的数字将转换为字符类型。我想这就是你想要的?您是否尝试过@dww提到的
xmlToDataFrame()
,您的XML是一个简单的结构,可以使用XML包的xmlToDataFrame:
df处理,谢谢。我遇到一个错误
无法为签名“xml\u nodeset”的函数“xmlToDataFrame”找到继承的方法
。知道我做错了什么吗?您正在合并包。rvest的
read_html()
输出可能与对象在
xmlToDataframe()
中使用的XML的
xmlParse()
不一致。考虑只使用XML来满足这种简单的需求。
xmlstr <- readLines("test.xml")
df <- xmlToDataFrame(xmlstr)
doc = readLines('https://www.gov.uk/government/announcements.atom?announcement_filter_option=statements&topics%5B%5D=transport')
df2 <- xmlToDataFrame(doc)