2014-11-03 2 views
0

webservice api에 대한 결과로 xml이 있습니다. 내가 결과를 구문 분석하고 데이터베이스 테이블을 업데이 트해야합니다. 내 XML은 아래 있습니다. 응답 텍스트입니다.SQL 서버에서이 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') 

나는 두 배의 값을하고 싶지만 항상 널 (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 
+0

나는 vari를 시도했다. 개미와 코드에 나는 NULL이 아닌 1을가집니다. XML이'@ ResponseText'에 입력되는 것이 확실합니까? 그것을 확인하기 전에'PRINT @ ResponseText'를 시도하십시오. '@ ResponseText'는 어떻게 채우고 있습니까? –

+0

제안이 효과가 있습니까? 그렇다면 내 대답에 동의 함을 표시해주십시오. 감사. –

답변

1
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') 

네임 스페이스의 사용을 반영하도록 업데이트; 일반적인 점은이 작업을하기 위해 문자열 조작을 할 필요가 없다는 것입니다. 헤더가 완전히 지원됩니다. 그러나 네임 스페이스는 중요합니다. -

+0

안녕하세요 스튜어트, 편집 된 코드를 확인하십시오 –

+0

완료; 네임 스페이스가 사물을 변경합니다. –

1

하지 대답, 그냥 몇 가지 예제 코드이 아닌 NULL, 1 반환

값() 메소드를 사용하여 쿼리 할 때 당신은 네임 스페이스를 선언해야
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 
+0

안녕하세요, 코드를 업데이트했습니다. 그러나 여전히 같은 문제에 직면 해 있습니다. 위의 코드 변경 사항 –

+0

아니요. 원래 XML 샘플에는'xmlns = "http://www.webserviceX.NET/"'이 없습니다. 네가 그걸 남겨두면 널이된다. 당신이 그것을 꺼내면 당신은 1을 얻습니다. 당신이 Sveins의 조언을 따르는다면, 당신은 그것을 남겨 둘 수 있고 당신은 1을 얻게 될 것입니다. Svein은 대답을 가지고 있습니다. 앞으로는 모든 코드를 게시하십시오. –

2

.

그래서 전체 예제는 1.000를 반환해야이

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 

(10 진수) 모양을

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

'(/double)[1]' 

에서 값()의 ​​첫 번째 매개 변수를 변경