R XML 文件
XML 指的是可扩展标记语言(eXtensible Markup Language),XML 被设计用来传输和存储数据。
如果你对 XML 还不了解,可以先查阅:XML 教程
R 语言读写 XML 文件需要安装扩展包,我们可以在 R 到控制台输入以下命令来安装:
install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/")
查看是否安装成功:
> any(grepl("XML",installed.packages()))
[1] TRUE
创建 sites.xml 文件,xml 文件与测试脚本同一目录下,代码如下:
实例 <sites>
<site>
<id>1</id>
<name>Google</name>
<url>www.google.com</url>
<likes>111</likes>
</site>
<site>
<id>2</id>
<name>Runoob</name>
<url>www.zhishitu.com</url>
<likes>222</likes>
</site>
<site>
<id>3</id>
<name>Taobao</name>
<url>www.taobao.com</url>
<likes>333</likes>
</site>
</sites>
<sites>
<site>
<id>1</id>
<name>Google</name>
<url>www.google.com</url>
<likes>111</likes>
</site>
<site>
<id>2</id>
<name>Runoob</name>
<url>www.zhishitu.com</url>
<likes>222</likes>
</site>
<site>
<id>3</id>
<name>Taobao</name>
<url>www.taobao.com</url>
<likes>333</likes>
</site>
</sites>
接下来我们可以使用 XML 包来载入 xml 文件的数据:
实例
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 输出结果
print(result)
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 输出结果
print(result)
统计 xml 数据量:
实例
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 提取根节点
rootnode <- xmlRoot(result)
# 统计数据量
rootsize <- xmlSize(rootnode)
# 输出结果
print(rootsize)
执行以上代码输出结果为:[1] 3
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 提取根节点
rootnode <- xmlRoot(result)
# 统计数据量
rootsize <- xmlSize(rootnode)
# 输出结果
print(rootsize)
[1] 3
查看节点数据,某一行使用 [ ], 指定的行和列使用 [[ ]]:
实例
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 提取根节点
rootnode <- xmlRoot(result)
# 查看第 2 个节点数据
print(rootnode[2])
# 查看第 2 个节点的第 1 个数据
print(rootnode[[2]][[1]])
# 查看第 2 个节点的第 3 个数据
print(rootnode[[2]][[3]])
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 提取根节点
rootnode <- xmlRoot(result)
# 查看第 2 个节点数据
print(rootnode[2])
# 查看第 2 个节点的第 1 个数据
print(rootnode[[2]][[1]])
# 查看第 2 个节点的第 3 个数据
print(rootnode[[2]][[3]])
执行以上代码输出结果为:
$site
<site>
<id>2</id>
<name>Runoob</name>
<url>www.zhishitu.com</url>
<likes>222</likes>
</site>
attr(,"class")
[1] "XMLInternalNodeList" "XMLNodeList"
<id>2</id>
<url>www.zhishitu.com</url>
XML 转为数据列表
以上代码对输出都是 xml 格式,我们使用 xmlToList() 函数可以将文件对数据转为列表格式,更方便读取:
实例
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 转为列表
xml_data <- xmlToList(result)
print(xml_data)
print("============================")
# 输出第一行第二列的数据
print(xml_data[[1]][[2]])
执行以上代码输出结果为:$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] "Runoob"
$site$url
[1] "www.zhishitu.com"
$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 转为数据框
# 载入 XML 包
library("XML")
# 设置文件名
result <- xmlParse(file = "sites.xml")
# 转为列表
xml_data <- xmlToList(result)
print(xml_data)
print("============================")
# 输出第一行第二列的数据
print(xml_data[[1]][[2]])
$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] "Runoob"
$site$url
[1] "www.zhishitu.com"
$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 文件数据可以转为数据框类型,这样我们就更方便对数据进行操作:
实例
# 载入 XML 包
library("XML")
# xml 文件数据转为数据框
xmldataframe <- xmlToDataFrame("sites.xml")
print(xmldataframe)
# 载入 XML 包
library("XML")
# xml 文件数据转为数据框
xmldataframe <- xmlToDataFrame("sites.xml")
print(xmldataframe)
执行以上代码输出结果为:
id name url likes
1 1 Google www.google.com 111
2 2 Runoob www.zhishitu.com 222
3 3 Taobao www.taobao.com 333