我有一个客户正在使用我们开发的平台,该平台允许客户Web服务返回数据由MSSQL中的存储过程解析。我们有一个客户发回xml,其中包含嵌套的xmlns =" xxxxxx"对不同URI位置的声明。首先这是有效的吗?其次是可以使用XQuery解析吗?我已经尝试使用t-sql xml数据类型的.value和.query功能来尝试解决问题但是第二个默认命名空间"发挥作用似乎是一个几乎不可能使用我所知道的技术交叉的边界。这是一个示例xml响应:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<FF_LOG_RSPD_CONT xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/X.V1">
<FF_LOGIN_WSDL_RSPD>
<FF_PYIVR_RS_DER xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/Y.V1">
<EMPLID>111111</EMPLID>
<PIN>2222</PIN>
<NEW_PIN_FLAG>N</NEW_PIN_FLAG>
<REVOKE_FLAG>N</REVOKE_FLAG>
<LAST_4_OF_SSN></LAST_4_OF_SSN>
<WSDL_SUCCESS_FLAG>Y</WSDL_SUCCESS_FLAG>
</FF_PYIVR_RS_DER>
</FF_LOGIN_WSDL_RSPD>
</FF_LOG_RSPD_CONT>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:1)
您可以尝试显式调用命名空间吗?
declare @theXml XML = '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<FF_LOG_RSPD_CONT xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/X.V1">
<FF_LOGIN_WSDL_RSPD>
<FF_PYIVR_RS_DER xmlns="http://xmlns.oracle.com/Enterprise/Tools/schemas/Y.V1">
<EMPLID>111111</EMPLID>
<PIN>2222</PIN>
<NEW_PIN_FLAG>N</NEW_PIN_FLAG>
<REVOKE_FLAG>N</REVOKE_FLAG>
<LAST_4_OF_SSN></LAST_4_OF_SSN>
<WSDL_SUCCESS_FLAG>Y</WSDL_SUCCESS_FLAG>
</FF_PYIVR_RS_DER>
</FF_LOGIN_WSDL_RSPD>
</FF_LOG_RSPD_CONT>
</soapenv:Body>
</soapenv:Envelope>'
SELECT
@theXml.value('
declare namespace ns1="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace ns2="http://xmlns.oracle.com/Enterprise/Tools/schemas/X.V1";
declare namespace ns3="http://xmlns.oracle.com/Enterprise/Tools/schemas/Y.V1";
(/ns1:Envelope/ns1:Body/ns2:FF_LOG_RSPD_CONT/ns2:FF_LOGIN_WSDL_RSPD/ns3:FF_PYIVR_RS_DER/ns3:EMPLID)[1]',
'nvarchar(max)') as result
结果:
111111