[英]How convert a data.frame into a xml file with R?
我有一個簡單的data.frame有兩個變量,title和base64。 我需要將這個data.frame轉換為XML格式。 例如,我的數據是什么樣的..
str(df)
'data.frame': 2 obs. of 2 variables:
$ title : chr "Page One" "Page Two"
$ base64: chr "Very Long String thats a base64 character" "Very Long String thats a base64 character"
dput(df)結構(list(page = c(“Page One”,“Page Two”),base64 = c(“非常長的字符串表示base64字符”,“非常長字符串表示base64字符”)),. Names = c(“page”,“base64”),row.names = 1:2,class =“data.frame”)
我需要輸出一個格式如下的XML文件......
<report type="enchanced">
<pages>
<page>
<title>Page One</title>
<page> *** long base64 string *** </page>
</page>
<page>
<title>Page Two</title>
<page> *** long base64 string *** </page>
</page>
</pages>
</report>
我一直在試驗R中的XML包,甚至發現這個功能似乎應該可行,但我無法弄明白。 任何幫助是極大的贊賞。
library(XML)
convertToXML <- function(df,name) {
xml <- xmlTree("report")
xml$addNode(name, close=FALSE)
for (i in 1:nrow(df)) {
xml$addNode("page", close=FALSE)
for (j in names(df)) {
xml$addNode(j, df[i, j])
}
xml$closeTag()
}
xml$closeTag()
return(xml)
}
tr = convertToXML(df,"pages")
cat(saveXML(tr$page())) ## suppose to looks good
關於這個答案 ,我會這樣做
data<- structure(list(page = c("Page One", "Page Two"), base64 = c("Very Long String thats a base64 character", "Very Long String thats a base64 character")), .Names = c("page", "base64"), row.names = 1:2, class = "data.frame")
names(data) <- c("title", "page")
library(XML)
xml <- xmlTree()
# names(xml)
xml$addTag("report", close=FALSE, attrs=c(type="enhanced"))
xml$addTag("pages", close=FALSE)
for (i in 1:nrow(data)) {
xml$addTag("page", close=FALSE)
for (j in names(data)) {
xml$addTag(j, data[i, j])
}
xml$closeTag()
}
xml$closeTag()
xml$closeTag()
cat(saveXML(xml))
# <?xml version="1.0"?>
#
# <report type="enhanced">
# <pages>
# <page>
# <title>Page One</title>
# <page>Very Long String thats a base64 character</page>
# </page>
# <page>
# <title>Page Two</title>
# <page>Very Long String thats a base64 character</page>
# </page>
# </pages>
# </report>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.