2014-06-12 10 views
2

나는 B64 인코딩으로 인코딩 된 PDF 데이터가있는 xml을 많이 가지고 있습니다. 1) 밖으로 모든 데이터를 얻을 수있는 올바른 구문을 알아내는 :Xquery를 사용하여 XML에서 B64 인코딩 데이터 추출 및 디코딩

<Document> 
    <component> 
     <nonXMLBody> 
      <text mediaType="application/pdf" representation="B64">JVBERi0xLjMNJf//// 
      </text> 
     </nonXMLBody> 
     </component> 
</Document> 

나는 두 가지 문제가있다. 나는 잘린 버전을 계속 간다. varchar (max) 및 varbinary를 시도했습니다.

SELECT x.value('(component/nonXMLBody/text/text())[1]','varchar(max)') as 
FROM @XML.nodes('/Document') as Addr (x)) 

2) B64 데이터를 디코딩하는 방법.

필자는 필자가 필요로하는 것과 비슷한 것으로 보이는 게시물을 발견했지만 여전히 붙어 있습니다. 사전에 어떤 도움 Base64 encoding in SQL Server 2005 T-SQL

덕분에

+0

1) B64 텍스트의 행을 적절히 연결하고 적절하게 처리하십시오. 'text()'대신'fn : string()'을 사용해보십시오. - http://blog.davidcassel.net/2011/06/text-fnstring-and-fndata/를보십시오. – CiaPan

답변

0

지금까지 XQuery에 부분에 관한 한, 당신은 할 수 (해야합니까?)은 XS로 문서 내부의 Base64로 캐스팅 :

xs:base64Binary((component/nonXMLBody/text)[1]) 

와 base64Binary 인 귀하가 가정하는 것처럼 문서가 컨텍스트 항목에 바인딩되어 있다고 가정합니다. 캐스트가 없으면 태그의 내용은 형식이 지정되지 않거나 최상의 문자열이됩니다.

일단이 xs : base64Binary 원자 항목이 있으면 SQL Server 유형에 바인딩하는 것에 익숙하지 않고 문서를 보면 varbinary (max)가 트릭을 수행 할 수있는 것 같습니다. 다음과 같이하십시오 :

SELECT x.value('xs:base64Binary((component/nonXMLBody/text)[1])','varbinary(max)') as 
FROM @XML.nodes('/Document') as Addr (x))