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

在R语言中调用XML结构SOAP Web Service并提取目标数据

R语言SOAP WSDL节点提取及接口调用方案

前置依赖

首先安装并加载需要的工具包:

install.packages(c("httr", "xml2"))
library(httr)
library(xml2)

提取指定WSDL节点内容

你当前GET请求返回的是SOAP服务的WSDL定义文档,要提取第11、13、15行对应的响应消息节点,使用以下代码即可:

# 沿用你已有的连接代码
url <-"https://sigaf.hacienda.go.cr/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/zfmg_reports/500/zfmg_reports/binding?sap-client=500"
username <- "XXX"
password <- "YYY"
MH_1 <- GET(url, authenticate(username,password, type = "basic"))

# 解析XML内容,指定编码消除警告
wsdl_doc <- content(MH_1, encoding = "UTF-8")
# 注册命名空间
ns <- xml_ns_rename(xml_ns(wsdl_doc), d1 = "wsdl")

# 方法1:按节点名称精准提取三个响应节点
target_nodes <- xml_find_all(wsdl_doc, ".//wsdl:message[contains(@name, 'Response')]", ns = ns)

# 方法2:按你标注的节点位置直接提取
all_top_nodes <- xml_children(wsdl_doc)
target_nodes <- all_top_nodes[c(11,13,15)]

# 输出节点完整内容
print(target_nodes)

# 提取节点的属性信息
node_info <- lapply(target_nodes, function(node){
  list(
    消息名称 = xml_attr(node, "name"),
    关联元素 = xml_attr(xml_child(node, "part", ns = ns), "element")
  )
})
print(node_info)

调用SOAP接口获取实际业务数据

如果你需要获取对应接口的实际返回业务数据,需要构造SOAP请求报文调用对应接口,示例代码如下(以调用ZwsZfmMensual接口为例):

# 构造SOAP请求体,需根据WSDL中types定义的参数结构补充入参
soap_req <- '<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:rfc:functions">
  <soapenv:Header/>
  <soapenv:Body>
    <urn:ZwsZfmMensual>
      <!-- 此处替换为接口要求的实际入参 -->
      <I_PERIODO>202110</I_PERIODO>
    </urn:ZwsZfmMensual>
  </soapenv:Body>
</soapenv:Envelope>'

# 发送POST请求调用接口
resp <- POST(
  # 接口地址可从WSDL的service节点中获取
  url = "http://APP-SIGAF4.mh.hacienda.go.cr:8000/sap/bc/srt/rfc/sap/zfmg_reports/500/zfmg_reports/binding?sap-client=500",
  authenticate(username, password, type = "basic"),
  content_type("text/xml;charset=utf-8"),
  add_headers(SOAPAction = "urn:sap-com:document:sap:soap:functions:mc-style/ZwsZfmMensual"),
  body = soap_req
)

# 解析返回的业务数据
business_xml <- content(resp, encoding = "UTF-8")
print(business_xml)

内容的提问来源于stack exchange,提问作者Oscar CENTENO MORA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:02