簡體   English   中英

如何在SQL Server中讀取此XML

[英]how to read this xml in sql server

我將xml作為webservice api的結果。 我需要解析結果並更新到數據庫表。 我的xml在下面。 它是一個響應文本。

<?xml version="1.0" encoding="utf-8"?> 
<double>1</double>

Sqlserver 2008代碼:

    declare @xml xml, @rate DECIMAL(10,4)
  set @xml=REPLACE(@ResponseText ,'encoding="utf-8"','')
  select @rate= @xml.value('(/double)[1]','decimal')

我想獲取double的值,但它始終返回null。

請幫幫我。

嗨,根據您的建議進行了更改仍然沒有得到。

 declare @xml XML
 DECLARE @responsetext VARCHAR(900)

 declare @rate DECIMAL(10,4)
 SET @responsetext = '<?xml version="1.0" encoding="utf-8"?>
  <double xmlns="http://www.webserviceX.NET/">1</double>'
 set @xml=REPLACE(@ResponseText ,'encoding="utf-8"','')
 select @rate= @xml.value('(/double)[1]','decimal')
 select @rate

使用value()方法查詢時,需要聲明名稱空間。

將value()的第一個參數更改為

'(/double)[1]'

'declare namespace x="http://www.webserviceX.NET/"; (/x:double)[1]'

因此完整的示例如下所示

declare @xml XML
 DECLARE @responsetext VARCHAR(900)

 declare @rate DECIMAL(10,4)
 SET @responsetext = '<?xml version="1.0" encoding="utf-8"?>
  <double xmlns="http://www.webserviceX.NET/">1</double>'
 set @xml=REPLACE(@ResponseText ,'encoding="utf-8"','')
 select @rate= @xml.value('declare namespace x="http://www.webserviceX.NET/"; (/x:double)[1]','decimal')
 select @rate

應返回1.000(十進制)

DECLARE @X XML = '<?xml version="1.0" encoding="utf-8"?> 
<double xmlns="http://www.webserviceX.NET/">1</double>'

SELECT @X.value ('declare namespace x="http://www.webserviceX.NET/"; (/x:double)[1]', 'decimal')

更新以反映您對名稱空間的使用; 總的來說,您不需要進行字符串操作即可完成這項工作。 標題完全受支持。 但是,名稱空間很重要。

沒有答案,只有一些示例代碼-這將返回1,而不是NULL:

declare @xml xml,        @rate DECIMAL(10,4)
declare @ResponseText varchar(900)

set @ResponseText = '<?xml version="1.0" encoding="utf-8"?> <double>1</double>'

set @xml=REPLACE(@ResponseText ,'encoding="utf-8"','')
select @rate= @xml.value('(/double)[1]','decimal')
select @rate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM