[英]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.