R语言作为常用的数据分析工具,经常需要处理各类结构化数据,XML作为一种通用的数据交换格式,在接口返回、配置文件等场景中十分常见。R语言的XML包提供了完整的XML数据解析能力,能够满足基础的数据处理需求。

XML包的安装与加载
在使用XML包之前,需要先完成安装和加载操作,安装时可以选择CRAN官方源,加载后可以通过包内的函数查看版本信息确认是否加载成功。
# 安装XML包
install.packages("XML")
# 加载XML包
library(XML)
# 查看XML包版本
packageVersion("XML")
解析XML数据
XML包支持解析本地XML文件和远程URL返回的XML内容,解析后会生成XML文档对象,后续的所有操作都基于这个对象展开。
解析本地XML文件
假设本地有一个名为test.xml的文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1">
<name>张三</name>
<age>25</age>
<city>北京</city>
</user>
<user id="2">
<name>李四</name>
<age>28</age>
<city>上海</city>
</user>
</users>
解析本地文件的代码如下:
# 解析本地XML文件,替换为你的文件路径 xml_doc <- xmlParse(file = "test.xml") # 查看解析后的文档结构 xml_doc
解析远程XML内容
如果是远程URL返回的XML数据,可以直接传入URL地址进行解析,示例如下:
# 解析远程XML内容,替换为实际的XML地址 xml_url <- "http://ipipp.com/test.xml" xml_doc <- xmlParse(file = xml_url) xml_doc
提取XML节点信息
解析得到XML文档对象后,需要通过XPath语法定位节点,再提取节点的内容或者属性信息。
提取节点内容
使用getNodeSet函数结合XPath获取节点集合,再通过xmlValue提取节点文本内容:
# 获取所有user节点下的name节点内容 name_nodes <- getNodeSet(xml_doc, path = "//user/name") # 提取每个name节点的文本内容 user_names <- sapply(name_nodes, xmlValue) user_names
提取节点属性
如果节点带有属性,比如上述示例中user节点的id属性,可以通过xmlAttrs或者xmlGetAttr提取:
# 获取所有user节点 user_nodes <- getNodeSet(xml_doc, path = "//user") # 提取每个user节点的id属性 user_ids <- sapply(user_nodes, function(node) xmlGetAttr(node, "id")) user_ids
转换为数据框
处理XML数据的最终目标通常是将其转换为R语言常用的数据框格式,方便后续的分析操作。可以通过遍历节点提取对应信息后组装成数据框:
# 提取所有user节点的信息 user_nodes <- getNodeSet(xml_doc, path = "//user") # 构建数据框 user_df <- data.frame( id = sapply(user_nodes, function(node) xmlGetAttr(node, "id")), name = sapply(user_nodes, function(node) xmlValue(getNodeSet(node, "./name")[[1]])), age = sapply(user_nodes, function(node) xmlValue(getNodeSet(node, "./age")[[1]])), city = sapply(user_nodes, function(node) xmlValue(getNodeSet(node, "./city")[[1]])), stringsAsFactors = FALSE ) # 查看转换后的数据框 user_df
上述代码执行后,就可以得到结构清晰的数据框,后续可以直接使用R语言的其他分析函数对数据进行处理。
常见问题说明
- 如果解析XML时出现编码错误,可以在
xmlParse函数中指定encoding参数,比如encoding = "UTF-8" - XPath语法是提取节点的核心,需要掌握基础的路径表达式,比如
//表示任意层级下的节点,./表示当前节点下的子节点 - 如果XML结构比较复杂,建议先通过
xmlStructure函数查看文档的层级结构,再编写对应的XPath路径
R语言XML包XML数据解析XML_to_dataframe修改时间:2026-06-28 19:42:30