使用Xquery从XML中提取和解码B64编码数据

时间:2014-06-12 15:07:17

标签: sql xml encoding xquery

我有很多带有pdf数据的xmls,用B64编码编码。

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

我有两个问题: 1)找出正确的语法以获取所有数据。我一直在截断版本。我已经尝试过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

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

就XQuery部分而言,您可以(应该?)将文档内的Base64强制转换为xs:base64Binary

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

假设文档与您似乎假设的上下文项绑定。如果没有强制转换,标记的内容将是无类型的,或者最多只是一个字符串。

一旦你有了这个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))