将XML转换为R中的数据框

时间:2017-11-20 12:53:14

标签: r xml

在我从网上获得的XML响应中,有一部分数据结构如下:

<votos>
<Deputado Nome="Roberto Britto" ideCadastro="141529" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="Luiz Argôlo" ideCadastro="160547" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="José Carlos Araújo" ideCadastro="74140" Partido="PSD " UF="BA" Voto="Sim "/>
</votos>

我按如下方式解析了文件:

doc <- xmlTreeParse(raw_result,useInternal=TRUE)
rootNode <- xmlRoot(doc)

然后尝试创建我在开头显示的节点的数据框,如下所示:

rootvotacao <- rootNode[[4]][[1]][[2]]
votacao2 <- xmlSApply(rootvotacao, function(x) xmlSApply(x, xmlValue))
votacao2_df <- data.frame(t(votacao2),row.names=NULL)

但是,我只会为每个Deputado获得一个包含两列的表,并且只有一行包含list()

我想要的是为每个Deputado和5列提供一个表格,一行:NomeideCadastroPartidoUF,{ {1}}。

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用XML包和xmlToList来完成此操作。

library(XML)

raw_result <- '<votos>
<Deputado Nome="Roberto Britto" ideCadastro="141529" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="Luiz Argôlo" ideCadastro="160547" Partido="PP " UF="BA" Voto="Sim "/>
<Deputado Nome="José Carlos Araújo" ideCadastro="74140" Partido="PSD " UF="BA" Voto="Sim "/>
</votos>'

#i faced encoding issue hence

raw_result <- iconv(raw_result,'latin1','utf-8')



do.call(rbind,xmlToList(raw_result))

输出:

> do.call(rbind,xmlToList(raw_result))
         Nome                   ideCadastro Partido UF   Voto  
Deputado "Roberto Britto"       "141529"    "PP "   "BA" "Sim "
Deputado "Luiz Argôlo"         "160547"    "PP "   "BA" "Sim "
Deputado "José Carlos Araújo" "74140"     "PSD "  "BA" "Sim "