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