Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何从soapxml中提取值?_Oracle_Parsing_Soap_Xmltype - Fatal编程技术网

Oracle 如何从soapxml中提取值?

Oracle 如何从soapxml中提取值?,oracle,parsing,soap,xmltype,Oracle,Parsing,Soap,Xmltype,我有这样的soapxml: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <TryGetCardBalanceResponse xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"> <TryGetCardBa

我有这样的soapxml:

<s:Envelope
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <TryGetCardBalanceResponse
            xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank">
            <TryGetCardBalanceResult
                xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <Iban i:nil="true"/>
                <Money
                    xmlns:a="http://www.eubank.kz/Bis">
                    <a:Amount>198</a:Amount>
                    <a:Currency>KZT</a:Currency>
                </Money>
                <Status>Ok</Status>
            </TryGetCardBalanceResult>
        </TryGetCardBalanceResponse>
    </s:Body>
</s:Envelope>

198
KZT
好啊
需要获取值金额和货币

请帮忙,我怎么做

我试过:

select extractvalue(xmltype('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><TryGetCardBalanceResponse xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"><TryGetCardBalanceResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Iban i:nil="true"/><Money xmlns:a="http://www.eubank.kz/Bis"><a:Amount>198</a:Amount><a:Currency>KZT</a:Currency></Money><Status>Ok</Status></TryGetCardBalanceResult></TryGetCardBalanceResponse></s:Body></s:Envelope>'),
                    '/s:Envelope/s:Body/TryGetCardBalanceResponse/TryGetCardBalanceResult/Money/a:Amount',
                    'xmlns:s="http://www.w3.org/2003/05/soap-envelope"
            xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:a="http://www.eubank.kz/Bis"') xml
  from dual
选择extractvalue(xmltype('198KZTOk'),
“/s:信封/s:Body/TryGetCardBalanceResponse/TryGetCardBalanceResult/Money/a:Amount”,
'xmlns:s='http://www.w3.org/2003/05/soap-envelope"
xmlns=”http://www.eubank.kz/Bis.Info.ExternalServices.Bank"
xmlns:i=”http://www.w3.org/2001/XMLSchema-instance"
xmlns:a=”http://www.eubank.kz/Bis“')xml
来自双重

但是查询返回的null

您的“s”命名空间不匹配:

select extractvalue(xmltype('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><TryGetCardBalanceResponse xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"><TryGetCardBalanceResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Iban i:nil="true"/><Money xmlns:a="http://www.eubank.kz/Bis"><a:Amount>198</a:Amount><a:Currency>KZT</a:Currency></Money><Status>Ok</Status></TryGetCardBalanceResult></TryGetCardBalanceResponse></s:Body></s:Envelope>'),
                    '/s:Envelope/s:Body/TryGetCardBalanceResponse/TryGetCardBalanceResult/Money/a:Amount',
--                    'xmlns:s="http://www.w3.org/2003/05/soap-envelope"
                    'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:a="http://www.eubank.kz/Bis"') xml
  from dual
/

XML                           
------------------------------
198

或者,如果它实际上已经存储为XMLType而不是字符串,只需
传递t即可。您的_列

您的名称空间不匹配:

select extractvalue(xmltype('<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><TryGetCardBalanceResponse xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"><TryGetCardBalanceResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Iban i:nil="true"/><Money xmlns:a="http://www.eubank.kz/Bis"><a:Amount>198</a:Amount><a:Currency>KZT</a:Currency></Money><Status>Ok</Status></TryGetCardBalanceResult></TryGetCardBalanceResponse></s:Body></s:Envelope>'),
                    '/s:Envelope/s:Body/TryGetCardBalanceResponse/TryGetCardBalanceResult/Money/a:Amount',
--                    'xmlns:s="http://www.w3.org/2003/05/soap-envelope"
                    'xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns="http://www.eubank.kz/Bis.Info.ExternalServices.Bank"
            xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:a="http://www.eubank.kz/Bis"') xml
  from dual
/

XML                           
------------------------------
198
或者,如果它实际上已经存储为XMLType而不是字符串,只需
传递t.your_列

select x.*
from your_table t
cross join xmltable (
  xmlnamespaces (
      default 'http://www.eubank.kz/Bis.Info.ExternalServices.Bank',
      'http://schemas.xmlsoap.org/soap/envelope/' AS "s",
      'http://www.w3.org/2001/XMLSchema-instance' as "i",
      'http://www.eubank.kz/Bis' as "a"
  ),
  's:Envelope/s:Body/TryGetCardBalanceResponse/TryGetCardBalanceResult/Money'
  passing xmltype(t.your_column)
  columns
    amount number path 'a:Amount',
    currency varchar2(3) path 'a:Currency'
) x;