如何使用XQuery/T-SQL解析包含嵌套默认名称的客户xml
我有一个客户使用我们开发的平台,该平台允许客户webservice返回数据通过MSSQL中的存储过程进行解析。我们有一个客户将包含嵌套xmlns=“xxxxxx”声明的xml发送回不同的URI位置。首先,这个有效吗?第二,是否可以使用XQuery进行解析?我已经尝试使用t-sql xml数据类型的.value和.query功能来解决这个问题,但“第二个默认名称空间”的作用点似乎是一个边界,使用我知道的技术几乎不可能跨越这个边界。下面是一个示例xml响应:如何使用XQuery/T-SQL解析包含嵌套默认名称的客户xml,xml,tsql,soap,xquery,xml-namespaces,Xml,Tsql,Soap,Xquery,Xml Namespaces,我有一个客户使用我们开发的平台,该平台允许客户webservice返回数据通过MSSQL中的存储过程进行解析。我们有一个客户将包含嵌套xmlns=“xxxxxx”声明的xml发送回不同的URI位置。首先,这个有效吗?第二,是否可以使用XQuery进行解析?我已经尝试使用t-sql xml数据类型的.value和.query功能来解决这个问题,但“第二个默认名称空间”的作用点似乎是一个边界,使用我知道的技术几乎不可能跨越这个边界。下面是一个示例xml响应: <?xml version
<?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>
111111
2222
N
N
Y
能否尝试显式调用名称空间
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