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

xml2::read_xml读取真实存在的URL时报标签不匹配错误如何修复

问题修复结论

该问题可修复。
报错核心原因:请求目标接口时,服务器未返回预期的XML格式数据,实际返回了HTML格式内容(常见触发场景为接口反爬拦截、未明确声明接受XML格式返回、网络拦截返回了提示页),HTML中未闭合的<meta>标签不符合XML语法规范,因此触发标签不匹配的解析错误。

修复方法

方法1:保留XML解析逻辑,补全请求头

请求时携带合法的浏览器标识头,明确告知服务器需要XML格式响应,避免被反爬规则拦截:

library(httr)
library(xml2)

u <- "https://bank.gov.ua/NBUStatService/v1/statdirectory/ovdp?date=20210112"
# 构造带合法头的请求
resp <- GET(
  u,
  add_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    `Accept` = "application/xml,text/xml;q=0.9,*/*;q=0.8"
  )
)
# 校验请求是否成功
stop_for_status(resp)
# 解析XML内容
f <- read_xml(resp)

方法2:改用更稳定的JSON格式返回

该接口原生支持JSON格式返回,解析容错率更高,只需在URL末尾追加&json参数即可:

library(httr)
library(jsonlite)

u <- "https://bank.gov.ua/NBUStatService/v1/statdirectory/ovdp?date=20210112&json"
resp <- GET(u, add_headers(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"))
stop_for_status(resp)
# 直接解析为结构化数据
ovdp_data <- fromJSON(content(resp, as = "text"))

排查提示:如果补全请求头后仍报错,先确认当前网络可正常访问乌克兰央行官方站点,网络不通时防火墙/运营商返回的HTML拦截页也会触发同类解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:12:20