使用XML解析SQL Server中的Web服务响应(以XML格式)

时间:2017-12-20 13:16:43

标签: xml sql-server-2008

我有一个调用Web服务的SQL Server过程,Web服务以下列格式返回响应:

<?xml version="1.0" encoding="UTF-8" ?>  
 <ProductServiceOutput ProductID="160" TransactionID="315" AMT="10000.00" TransactionStatus="SUCCESS" EntityID="1000005580401" Comments="Successfull" TxnDate="2017-12-19 19:31:45" UDF9="null" stdCode="null"/>

我想解析这个XML并获取ProductID,TransactionID,Amt,TransactionStatus和TxnDate的值。

我尝试过以下SQL,但是我遇到了编码错误。

DECLARE @sql NVARCHAR(MAX)
SET @sql = '<?xml version="1.0" encoding="UTF-8" ?>  
 <ProductServiceOutput ProductID="160" TransactionID="315" AMT="10000.00" 
 TransactionStatus="SUCCESS" EntityID="1000005580401" Comments="Successfull" 
 TxnDate="2017-12-19 19:31:45" UDF9="null" stdCode="null"/>'

DECLARE @xmlData XML
SET @xmlData = CONVERT(XML, @sql, 1);
SELECT 
      T.C.value('(ProductID)[1]', 'int')
      ,T.C.value('(TransactionID)[1]', 'nvarchar(20)')
      ,T.C.value('(AMT)[1]', 'decimal(15,2)')
      ,T.C.value('(TransactionStatus)[1]', 'nvarchar(30)')
   FROM @xmlData.nodes('ProductServiceOutput') T(C)

即使解决了编码错误,我也得到了NULL值。 请帮助我获取价值。

1 个答案:

答案 0 :(得分:2)

请查看图片和/或代码。你几乎拥有它! :)

  DECLARE @sql NVARCHAR(MAX)
SET @sql = '
 <ProductServiceOutput ProductID="160" TransactionID="315" AMT="10000.00" 
 TransactionStatus="SUCCESS" EntityID="1000005580401" Comments="Successfull" 
 TxnDate="2017-12-19 19:31:45" UDF9="null" stdCode="null"/>'

DECLARE @xmlData XML
SET @xmlData = CONVERT(XML, @sql, 1);
SELECT 
      T.C.value('@ProductID[1]', 'int') AS ProductId
      ,T.C.value('@TransactionID[1]', 'nvarchar(20)') As TransactionID
      ,T.C.value('@AMT[1]', 'decimal(15,2)') AS AMT
      ,T.C.value('@TransactionStatus[1]', 'nvarchar(30)') AS TransactionStatus
   FROM @xmlData.nodes('ProductServiceOutput') T(C)