使用R语言XML包读取XML数据时遇file.exists错误,求解决
解决XML提取第11条
<record>的错误问题 错误原因
你遇到的file.exists(file)错误,大概率是因为误将XML节点对象当作文件路径参数,传给了需要文件路径的函数(比如read.table、scan这类),而非直接提取节点的文本内容。
解决方案
以下是两种在R中正确处理XML数据的实现方式:
方法1:使用xml2包(现代简洁)
# 安装并加载xml2包 if (!require(xml2)) install.packages("xml2") library(xml2) # 读取远程XML数据 xml_doc <- read_xml("http://www.ggobi.org/book/data/australian-crabs.xml") # 统计<record>总数量 record_count <- length(xml_find_all(xml_doc, "//record")) cat("总记录数:", record_count, "\n") # 输出208 # 提取第11条<record>的文本值 record_11 <- xml_text(xml_find_all(xml_doc, "//record")[[11]]) cat("第11条记录文本:", record_11, "\n")
方法2:使用XML包(传统经典)
# 安装并加载XML包 if (!require(XML)) install.packages("XML") library(XML) # 读取远程XML数据 xml_doc <- xmlParse("http://www.ggobi.org/book/data/australian-crabs.xml") # 统计<record>总数量 record_nodes <- getNodeSet(xml_doc, "//record") record_count <- length(record_nodes) cat("总记录数:", record_count, "\n") # 提取第11条<record>的文本值 record_11 <- xmlValue(record_nodes[[11]]) cat("第11条记录文本:", record_11, "\n")
关键注意点
- 不要将
record_nodes[[11]]这类节点对象传给file.exists、read.table等需要文件路径的函数,直接用xml_text(xml2包)或xmlValue(XML包)提取文本即可。 - 远程XML读取时,
read_xml和xmlParse都支持直接传入URL,无需提前下载到本地。
内容的提问来源于stack exchange,提问作者Moh
相关产品推荐
相关产品推荐

