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 > yssmx </ name > < url > www.yssmx.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 数据量:

实例

# 载入 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 ] ] )

执行以上代码输出结果为:

									$site
<site>
  <id>2</id>
  <name>yssmx</name>
  <url>www.yssmx.com</url>
  <likes>222</likes>
</site> 
attr(,"class")
[1] "XMLInternalNodeList" "XMLNodeList"        
<id>2</id> 
<url>www.yssmx.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] "yssmx"
$site$url
[1] "www.yssmx.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 文件数据可以转为数据框类型,这样我们就更方便对数据进行操作:

实例

# 载入 XML 包
library ( "XML" )

# xml 文件数据转为数据框
xmldataframe <- xmlToDataFrame ( "sites.xml" )
print ( xmldataframe )

执行以上代码输出结果为:

										id   name            url likes
1  1 Google www.google.com   111
2  2 yssmx www.yssmx.com   222
3  3 Taobao www.taobao.com   333