簡體   English   中英

將xml / html文檔中的元素強制轉換為data.frame

[英]Coerce elements in xml/html document to data.frame

假設您有以下格式的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>

將這些脅迫到data.frame的最優雅的方法是data.frame ,即。 相當於以下..?

data.frame(sub_a = c('a',1), sub_b = c('b',2), sub_c = c('c',3))
  sub_a sub_b sub_c
1     a     b     c
2     1     2     3

它不是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 <- readLines("test.xml")
df <- xmlToDataFrame(xmlstr)

如果您想直接從http地址獲取xml(如您問題的注釋中所示),則可以使用

doc = readLines('https://www.gov.uk/government/announcements.atom?announcement_filter_option=statements&topics%5B%5D=transport')
df2 <- xmlToDataFrame(doc)

如果您要處理的大型XML文件轉換速度很慢,則此博客文章描述了github上托管的一種更快的函數,您可以嘗試: require(devtools); install_github("processVISION", "muschellij2") require(devtools); install_github("processVISION", "muschellij2")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM