我有一个调用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值。 请帮助我获取价值。
答案 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)