我有很多带有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
提前感谢您提供任何帮助
答案 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))