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