XML 指的是可擴(kuò)展標(biāo)記語言(eXtensible Markup Language),XML 被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù)。
R 語言讀寫 XML 文件需要安裝擴(kuò)展包,我們可以在 R 到控制臺(tái)輸入以下命令來安裝:
install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/")查看是否安裝成功:
> any(grepl("XML",installed.packages()))
[1] TRUE創(chuàng)建 sites.xml 文件,xml 文件與測(cè)試腳本同一目錄下,代碼如下:
<sites> <site> <id>1</id> <name>Google</name> <url>www.google.com</url> <likes>111</likes> </site> <site> <id>2</id> <name>Nhooo</name> <url>www.jixiangtaizi.com.cn</url> <likes>222</likes> </site> <site> <id>3</id> <name>Taobao</name> <url>www.taobao.com</url> <likes>333</likes> </site> </sites>
接下來我們可以使用 XML 包來載入 xml 文件的數(shù)據(jù):
# 載入 XML 包
library("XML")
# 設(shè)置文件名
result <- xmlParse(file = "sites.xml")
# 輸出結(jié)果
print(result)統(tǒng)計(jì) xml 數(shù)據(jù)量:
# 載入 XML 包
library("XML")
# 設(shè)置文件名
result <- xmlParse(file = "sites.xml")
# 提取根節(jié)點(diǎn)
rootnode <- xmlRoot(result)
# 統(tǒng)計(jì)數(shù)據(jù)量
rootsize <- xmlSize(rootnode)
# 輸出結(jié)果
print(rootsize)執(zhí)行以上代碼輸出結(jié)果為:
[1] 3
查看節(jié)點(diǎn)數(shù)據(jù),某一行使用 [ ], 指定的行和列使用 [[ ]]:
# 載入 XML 包
library("XML")
# 設(shè)置文件名
result <- xmlParse(file = "sites.xml")
# 提取根節(jié)點(diǎn)
rootnode <- xmlRoot(result)
# 查看第 2 個(gè)節(jié)點(diǎn)數(shù)據(jù)
print(rootnode[2])
# 查看第 2 個(gè)節(jié)點(diǎn)的第 1 個(gè)數(shù)據(jù)
print(rootnode[[2]][[1]])
# 查看第 2 個(gè)節(jié)點(diǎn)的第 3 個(gè)數(shù)據(jù)
print(rootnode[[2]][[3]])執(zhí)行以上代碼輸出結(jié)果為:
$site <site> <id>2</id> <name>Nhooo</name> <url>www.jixiangtaizi.com.cn</url> <likes>222</likes> </site> attr(,"class") [1] "XMLInternalNodeList" "XMLNodeList" <id>2</id> <url>www.jixiangtaizi.com.cn</url>
以上代碼對(duì)輸出都是 xml 格式,我們使用 xmlToList() 函數(shù)可以將文件對(duì)數(shù)據(jù)轉(zhuǎn)為列表格式,更方便讀取:
# 載入 XML 包
library("XML")
# 設(shè)置文件名
result <- xmlParse(file = "sites.xml")
# 轉(zhuǎn)為列表
xml_data <- xmlToList(result)
print(xml_data)
print("============================")
# 輸出第一行第二列的數(shù)據(jù)
print(xml_data[[1]][[2]])執(zhí)行以上代碼輸出結(jié)果為:
$site $site$id [1] "1" $site$name [1] "Google" $site$url [1] "www.google.com" $site$likes [1] "111" $site $site$id [1] "2" $site$name [1] "Nhooo" $site$url [1] "www.jixiangtaizi.com.cn" $site$likes [1] "222" $site $site$id [1] "3" $site$name [1] "Taobao" $site$url [1] "www.taobao.com" $site$likes [1] "333" [1] "============================" [1] "Google"
XML 文件數(shù)據(jù)可以轉(zhuǎn)為數(shù)據(jù)框類型,這樣我們就更方便對(duì)數(shù)據(jù)進(jìn)行操作:
# 載入 XML 包
library("XML")
# xml 文件數(shù)據(jù)轉(zhuǎn)為數(shù)據(jù)框
xmldataframe <- xmlToDataFrame("sites.xml")
print(xmldataframe)執(zhí)行以上代碼輸出結(jié)果為:
id name url likes 1 1 Google www.google.com 111 2 2 Nhooo www.jixiangtaizi.com.cn 222 3 3 Taobao www.taobao.com 333