尝试调用肥皂网络服务时获取逗号分隔值
Posted
技术标签:
【中文标题】尝试调用肥皂网络服务时获取逗号分隔值【英文标题】:Get comma separated values when trying to call a soap web service 【发布时间】:2018-07-10 11:04:43 【问题描述】:我试图在我的包中调用一个soap web服务,它的响应是这样的..
<tns:abcdef>
<ns2:name>anji</ns2:name>
</tns:abcdef>
<tns:abcdef>
<ns2:name>Reddy</ns2:name>
</tns:abcdef>
我将节点的结果存储在一个变量中,并将其存储为 anjireddy。
但是我需要作为 anji 的响应,reddy 我该如何实现呢?
【问题讨论】:
“我将节点的结果存储在一个变量中” - 你现在是怎么做的?请编辑您的问题以显示您当前的代码,也许再解释一下? sur_name := apex_web_service.parse_xml (p_xml => l_xml, p_xpath => '//name/text()', p_ns => 'xmlns="abcdef.com/abv/svg/xsd/v1/surlist"' ); 这就是我的做法,只是将特定节点给出的响应存储在一个变量中 【参考方案1】:您调用的函数似乎只支持 XPath 1.0 或其子集;它不喜欢 string-join()
甚至是简单的 FLWOR 表达式。
如果没有知道 APEX 的人想出一个 sensibel 解决方案,您可以通过手动解析 XML 来解决它,而不是调用 parse_xml()
:
select xmlquery('string-join(//*:name/text(), ",")'
passing l_xml returning content).getstringval()
into sur_name
from dual;
我一直懒惰并使用通配符命名空间,但您可以包含适当的命名空间子句以使其更正确和健壮。
作为匿名区块中的演示:
set serveroutput on
declare
sur_name varchar2(230);
l_xml xmltype := xmltype('<root xmlns:tns="abcdef.com/abv/svg/xsd/v1/surlis" xmlns:ns2="abcdef.com/abv/svg/xsd/v1/surlist">
<tns:abcdef>
<ns2:name>anji</ns2:name>
</tns:abcdef>
<tns:abcdef>
<ns2:name>Reddy</ns2:name>
</tns:abcdef>
</root>');
begin
select xmlquery('string-join(//*:name/text(), ",")'
passing l_xml returning content).getstringval()
into sur_name
from dual;
dbms_output.put_line(sur_name);
end;
/
anji,Reddy
PL/SQL procedure successfully completed.
【讨论】:
这里我不能真正使用 select 语句,我只需要从 web 服务获取响应,它用逗号分隔数据。以上是关于尝试调用肥皂网络服务时获取逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章
在 Golang 中解组 XML 时如何在 interface 中获取数据?