尝试调用肥皂网络服务时获取逗号分隔值

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 服务获取响应,它用逗号分隔数据。

以上是关于尝试调用肥皂网络服务时获取逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章

SQL 从 XML 中获取列的逗号分隔值

在 Golang 中解组 XML 时如何在 interface 中获取数据?

如何在 Azure Databricks SQL 中将字段值转换为逗号分隔

用于逗号分隔值的PHP'foreach'[重复]

匹配列中的逗号分隔值

如何根据两个逗号分隔值的列中的任何一个值获取记录