You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中从多个XML文件生成文本DataFrame时遇报错的解决求助

解决R中读取多个XML文件生成DataFrame的问题

我来帮你搞定这个问题~你遇到的Error: 'x' must be a string of length 1错误,主要是因为代码里的管道操作和函数调用逻辑有点小问题,咱们调整一下就能正常运行了:

错误原因分析

原来的代码里,map_dfr的回调逻辑没处理好——你直接把read_xml(.) %>% xml_text(., trim = TRUE) %>% tibble()丢进去,这里的参数传递和管道衔接出现了混淆,而且Vectorize完全是多余的,因为dir_ls已经帮你列出了所有XML文件路径,map_dfr本身就可以遍历这些路径。

修改后的代码

下面是调整后的完整代码,不仅能解决错误,还会给你生成的DataFrame加上文件名列,方便你溯源每个文本来自哪个文件:

library(tidyverse)
library(xml2)

read_texts <- function(folder) {
  # 列出目标文件夹下所有XML文件
  dir_ls(folder, glob = "*.xml") %>%
    # 遍历每个文件路径,生成包含文件名和文本的tibble
    map_dfr(function(file_path) {
      # 读取XML文档
      xml_document <- read_xml(file_path)
      # 提取整个文档的文本,并整理成tibble
      tibble(
        file_name = basename(file_path), # 保留文件名
        text = xml_text(xml_document, trim = TRUE) # 提取并修剪文本
      )
    })
}

# 调用函数生成DataFrame
all_texts_df <- read_texts("forfatterskab")

额外优化(按需选择)

如果你的XML不是要提取整个文档的文本,而是特定节点的内容(比如所有<article>节点),可以把xml_text换成先定位节点再提取文本的逻辑,示例如下:

# 提取XML中所有<article>节点的文本,并合并成字符串
tibble(
  file_name = basename(file_path),
  text = xml_document %>% 
    xml_find_all("//article") %>% # 定位所有<article>节点
    xml_text(trim = TRUE) %>% 
    str_c(collapse = "\n") # 把多个节点的文本合并成一个字符串
)

这样修改后,你就能得到一个包含所有XML文件文本的单一DataFrame啦~

内容的提问来源于stack exchange,提问作者Victor Harbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:19:42