R读取XML数据

XML又叫可扩展标记语言,是一种具有结构性的标记语言,可以结构化的描述信息。XML最初的出现也是为了提供一个标准的数据格式。它便于数据共享,数据传输。也可以用于系统配置,内容管理。
在R语言里面读写XML数据可用XML包。

XML数据

这个是我们这个文章使用的数据,来自 https://www.runoob.com/xml/xml-tree.html。


    
        Everyday Italian
        Giada De Laurentiis
        2005
        30.00
    
    
        Harry Potter
        J K. Rowling
        2005
        29.99
    
    
        Learning XML
        Erik T. Ray
        2003
        39.95
    

解析XML

XML包里面解析XML的函数是xmlTreeParse。可以解析XML或者HTML文件,返回一个表示XML树结构的R对象。

# 安装XML包
install.packages("XML")
# 查看帮助文档
help(package="XML")
# 加载包
library(XML)
#解析XML文件
xmlTree <- xmlTreeParse(file="xmldata.xml")

R读取XML数据_第1张图片

XML更多操作

xmlRoot可以从上面的读取结构获得root XMLNode。
R读取XML数据_第2张图片
获取到的XMLNode对象可以继续操作。这个操作其实是基于xml的标准,其他语言也都是类似的操作,Java, javascript.

> rootNode <- xmlRoot(xmlTree)
> xmlSize(rootNode)
[1] 3
> rootNode[[2]]

 Harry Potter
 J K. Rowling
 2005
 29.99

getNodeSet可以根据你输入的条件取得各个层次的XMLNode。使用了XPath的语法和一些表达式。下面的就是一个简单的XPath的例子。

> titles <- getNodeSet(xmlRoot(xmlTree), "/bookstore/book/title")
> titles
[[1]]
Everyday Italian

[[2]]
Harry Potter

[[3]]
Learning XML

> sapply(titles, xmlGetAttr, "lang")
[1] "en" "en" "en"

xmlToDataFrame可以将XML数据按照一定的规则转换为data.frame对象。

> xmlTree <- xmlTreeParse(file="xmldata.xml")
> xmlToDataFrame(nodes =  getNodeSet(xmlRoot(xmlTree), "/bookstore/book"))
             title              author year price
1 Everyday Italian Giada De Laurentiis 2005 30.00
2     Harry Potter        J K. Rowling 2005 29.99
3     Learning XML         Erik T. Ray 2003 39.95

你可能感兴趣的:(R数据读写)