Sql server Soapenv解析错误
在SQL Server 2012中,我无法从如下所示的XML中获取值。请帮忙Sql server Soapenv解析错误,sql-server,xml,tsql,Sql Server,Xml,Tsql,在SQL Server 2012中,我无法从如下所示的XML中获取值。请帮忙 <soapenv:Envelope xmlns:soapenv="http://schemas.abc.org/soap/envelope/" xmlns:wsap="http://schemas.abc.com/abcd"> <soapenv:Header xmlns:wsap="http://schemas.abc.com/abcd" xmlns:soapenv="http://schemas
<soapenv:Envelope xmlns:soapenv="http://schemas.abc.org/soap/envelope/" xmlns:wsap="http://schemas.abc.com/abcd">
<soapenv:Header xmlns:wsap="http://schemas.abc.com/abcd" xmlns:soapenv="http://schemas.example.org/soap/envelope/">
<header xmlns:wsap="http://schemas.abc.com/abcd" xmlns:soapenv="http://schemas.example.org/soap/envelope/" xmlns="http://schemas.abc.com/General/1.0/">
<msg-id>0673c07b-2b67-11e7-f959-0b3aae0b96ad</msg-id>
</header>
</soapenv:Header>
<soapenv:Body>
<GetInvoice_DataResponse xmlns:soapenv="http://schemas.example.org/soap/abcd/" xmlns="http://schemas.abc.com/abcd" preserveSpace="no" qAccess="0">
<tuple xmlns="http://schemas.abc.com/abcd">
<old>
<S_ORDER xmlns="http://schemas.abc.com/abcd">
<BILLING_TYPE>Paid</BILLING_TYPE>
<CREATED>2017-11-13T10:40:28.0</CREATED>
<CREATED_BY>1-455454asdas</CREATED_BY>
<LAST_UPD>2017-11-13T10:40:29.0</LAST_UPD>
<LAST_UPD_BY>1-dsafasc</LAST_UPD_BY>
<INVC_DT>2017-11-13T00:00:00.0</INVC_DT>
<INVC_NUM>dasda123</INVC_NUM>
<STATUS_CD>New</STATUS_CD>
<X_CANCELLATION_REASON xmlns:xsi="http://www.example.org/2001/exap-example" null="true" xsi:nil="true" />
<GROSS_AMT>1768</GROSS_AMT>
<ITEM_DTL_AMT>1381.25</ITEM_DTL_AMT>
<ACCNT_ID>1-sad</ACCNT_ID>
<ORDER_ID>1-fasdf</ORDER_ID>
<GROSS_AMT>1768</GROSS_AMT>
<DIV_ID>1-fas</DIV_ID>
<ORDER_NUM>Osasaasf</ORDER_NUM>
<PART>264731200101</PART>
<ORDER_DT>20171113</ORDER_DT>
<INVOICE_DT>20171113</INVOICE_DT>
<ORDER_TYPE>ads fd</ORDER_TYPE>
<QTY>1</QTY>
<LINE_NUM>1</LINE_NUM>
<INVC_STATUS>New</INVC_STATUS>
<LINE_ITEM_STATUS>Invoiced</LINE_ITEM_STATUS>
<BU>CVBU</BU>
</S_ORDER>
</old>
</tuple>
<tuple xmlns="http://schemas.abc.com/abcd">
<old>
<S_ORDER xmlns="http://schemas.abc.com/abcd">
<BILLING_TYPE>Paid</BILLING_TYPE>
<CREATED>2017-11-13T10:40:28.0</CREATED>
<CREATED_BY>1-das</CREATED_BY>
<LAST_UPD>2017-11-13T10:40:29.0</LAST_UPD>
<LAST_UPD_BY>1-safdfa</LAST_UPD_BY>
<INVC_DT>2017-11-13T00:00:00.0</INVC_DT>
<INVC_NUM>afsfas415415</INVC_NUM>
<STATUS_CD>New</STATUS_CD>
<X_CANCELLATION_REASON xmlns:xsi="http://www.example.org/2001/exap-example" null="true" xsi:nil="true" />
<GROSS_AMT>1768</GROSS_AMT>
<ITEM_DTL_AMT>0</ITEM_DTL_AMT>
<ACCNT_ID>1-fasf</ACCNT_ID>
<ORDER_ID>1-saf</ORDER_ID>
<GROSS_AMT>1768</GROSS_AMT>
<DIV_ID>1-1IJGRE5</DIV_ID>
<ORDER_NUM>fasf-sf-s-fd-gd</ORDER_NUM>
<PART>0000079641</PART>
<ORDER_DT>20171113</ORDER_DT>
<INVOICE_DT>20171113</INVOICE_DT>
<ORDER_TYPE>fasdf d</ORDER_TYPE>
<QTY>1</QTY>
<LINE_NUM>2</LINE_NUM>
<INVC_STATUS>New</INVC_STATUS>
<LINE_ITEM_STATUS>Invoiced</LINE_ITEM_STATUS>
<BU>CVBU</BU>
</S_ORDER>
</old>
</tuple>
</GetInvoice_DataResponse>
</soapenv:Body>
</soapenv:Envelope>
如果XML位于XML类型的@Input变量中,可以尝试以下方法:
-- define your XML namespaces used in the XML document
;WITH XMLNAMESPACES ('http://schemas.abc.org/soap/envelope/' AS soapenv,
'http://schemas.abc.com/abcd' AS inv)
SELECT
-- "reach into" the XML fragment representing the "<S_ORDER>" element
-- and get the individual subelements from it - using the *default*
-- XML namespace for those subelements
BillingType = xc.value('(inv:BILLING_TYPE)[1]', 'varchar(50)'),
Created = xc.value('(inv:CREATED)[1]', 'varchar(50)')
FROM
-- define the path down to the "<S_ORDER>" elements, and fetch
-- an "in-memory" table of each of those elements as a XML fragment
@input.nodes('/soapenv:Envelope/soapenv:Body/inv:GetInvoice_DataResponse/inv:tuple/inv:old/inv:S_ORDER') AS XT(XC)
要点是:您需要在XQuery中尊重并包含XML名称空间 我需要获得S_Order中的BILLING_TYPE、CREATED等值,显示您的代码!你试过什么?您是否有错误-如果有:哪些错误?记住:我们看不到你的屏幕,也看不到你的思想——你必须向我们展示!嗨,马克,我试着阅读如下内容-选择N.C.value'BILLING_TYPE[1],'nvarchar80',N.C.value'CREATED[1],'datetime',N.C.value'CREATED_BY[1],'varchar50',等等,N.C.value'LAST_UPD_BY[1],'varchar50',N.C.value'INVC_DT[1],'datetime FROM@pXMLFile.nodes'/GetInvoice_DataResponse/tuple/old/S_ORDER'N C有什么帮助?问题是什么?你想做什么,失败的是什么?此外,SQL Server不是web服务客户端。为什么要解析数据库中的web服务响应?您好,Panagiotis,我想从上面的soap xml中获取计费类型、创建、创建人等。其中的所有值都按顺序存储到我的sql server表中