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

如何使用XPath从SOAP响应中提取partref和risikonr的值?

用XPath提取SOAP响应中的partref和risikonr值

没问题,XPath完全适合处理这个需求——不过你的SOAP响应带了命名空间,这是很多人踩坑的点,直接写标签名肯定找不到,我给你一步步说明怎么写:

核心前提:处理命名空间

先看你提供的SOAP片段里的命名空间绑定:

  • SOAP-ENV → http://schemas.xmlsoap.org/soap/envelope/
  • e → urn:tryg:forsikring:tjenester:engasjement
  • ef → urn:gjensidige:forsikring:engasjement

不管用什么工具/语言执行XPath,都得先把这些前缀和对应的URI绑定好,不然XPath会识别不了带前缀的标签。

定位表达式

假设partref和risikonr是嵌套在ef:risikogruppe节点下(从你给的截断片段来看是这个层级),对应的XPath写法如下:

提取所有partref的值

//ef:risikogruppe/ef:partref/text()

提取所有risikonr的值

//ef:risikogruppe/ef:risikonr/text()

更精准的层级定位(避免匹配到其他同名节点)

如果想从根节点开始精准定位,避免全局匹配的风险,可以写全路径:

/SOAP-ENV:Envelope/SOAP-ENV:Body/e:HentRisikoOversiktResponse/ef:engasjementOversiktRisikoer/ef:risikogrupper/ef:risikogruppe/ef:partref/text()

(risikonr的精准路径只需要把最后一段换成ef:risikonr/text()就行)

小提示

  • //表示从当前节点往下递归查找所有匹配的元素,适合不确定具体层级的情况;
  • /表示严格的层级父子关系,适合精准定位;
  • text()用来提取元素的文本内容,如果需要获取元素本身(不是文本),去掉text()即可。

比如在Chrome开发者工具里测试的话,可以用这段代码(已经帮你绑定了命名空间):

document.evaluate('//ef:risikogruppe/ef:partref/text()', document, function(prefix) {
  switch(prefix) {
    case 'ef': return 'urn:gjensidige:forsikring:engasjement';
    case 'e': return 'urn:tryg:forsikring:tjenester:engasjement';
    case 'SOAP-ENV': return 'http://schemas.xmlsoap.org/soap/envelope/';
    default: return null;
  }
}, XPathResult.STRING_TYPE, null).stringValue;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:58:27