我有一列包含了dataContract的XML字串,就像這樣:
<ReportHandler.ReportWrapper。
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/span>
xmlns="http://schemas.datacontract.org/2004/07/MyApp.Client.Main.GUI.Report">/span>
<ClassInfoList。
xmlns:d2p1="http://schemas.datacontract.org/2004/07/MyApp.Service.External.ServiceContracts.Internal.Report" />>
<Report> 77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPFh0cmFSZXBvcnRzTGF5b3V0U2VyaWFsaXplciBTZXJpYWxpemVyVmVyc2lvbj0iMTkuMi43LjAiIFJlZj0iMCIgQ29udHJvbFR5cGU9Ik15QXBwLkNsaWVudC5NYWluLkdVSS5SZXBvcnQucmVwUmVwb3J0LCBNeUFwcCwgVmVyc2lvbj01LjEzLjAuMjA4NTcsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbCIgTmFtZT0icmVwUmVwb3J0IiBNYXJnaW5zPSIxMDAsIDgwLCAyMCwgMTAwIiBQYXBlcktpbmQ9IkE0IiBQYWdlV2lkdGg9IjgyNyIgUGFnZUhlaWdodD0iMTE2OSIgVmVyc2lvbj0iMTkuMiIgUmVxdWVzdFBhcmFtZXRlcnM9ImZhbHNlIiBFdmVudHNJbmZvPSJyZXBSZXBvcnQsQmVmb3JlUHJpbnQscmVwUmVwb3J0X0JlZm9yZVByaW50O3JlcFJlcG9ydCxEZXNpZ25lckxvYWRlZCxyZXBSZXBvcnRfRGVzaWduZXJMb2FkZWQiPgogIDxCYW5kcz4KICAgIDxJdGVtMSBSZWY9IjEiIENvbnRyb2xUeXBlPSJEZXRhaWxCYW5kIiBOYW1lPSJEZXRhaWwiIEhlaWdodEY9IjIwNi42MjQ5ODUiIFRleHRBbGlnbm1lbnQ9IlRvcExlZnQiIFBhZGRpbmc9IjAsMCwwLDAsMTAwIiAvPgogICAgPEl0ZW0yIFJlZj0iMiIgQ29udHJvbFR5cGU9IlBhZ2VIZWFkZXJCYW5kIiBOYW1lPSJQYWdlSGVhZGVyIiBIZWlnaHRGPSIzMCIgVGV4dEFsaWdubWVudD0iVG9wTGVmdCIgUGFkZGluZz0iMCwwLDAsMCwxMDAiIC8 CiAgICA8SXRlbTMgUmVmPSIzIiBDb250cm9sV class="hljs- tag"><。 Report>
</ReportHandler.ReportWrapper>/span>
現在我需要挑出并解碼XML標簽內的base64 UTF-8字串,以搜索特定資料。
[base64 UTF-8字串]
最好的解決方案似乎是創建一個帶有課件的SQL存盤程式,并運行每一行,用CHARINDEX()和SUBSTRING提取base64字串,然后對內部base64 UTF-8字串進行解碼。
所以像這樣:
DECLARE @id INT)
DECLARE db_cursor CURSOR FOR SELECT Id
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
//查找start index with CHARINDEX('< Report>', Column) and end index with CHARINDEX('</Report> ' /span>, Column)
//使用SUBSTRING on column with start and end index found to get Base64 string
//轉換 [Base64 UTF- 8 到可搜索字串 選擇 轉換 Cast xs: base64Binary][1] Mybe we need to convert 到UTF-8 as well some方式。
//針對select做一個result字串以看它是否包含specific資料。
//如果它確實包含特定資料。將它記錄到另一個表 用簡單的insert
END
CLOSE db_cursor
DEALLOCATE db_cursor
是否有更好的方法來完成這個作業?
uj5u.com熱心網友回復:
你有一個XML檔案嵌入到另一個檔案中,從UTF-8編碼到base64。
要把它轉換回來,請執行以下步驟
使用XQuery選擇值(/ReportHandler.ReportWrapper/Report/text())[1]
WITH XMLNAMESPACES (DEFAULT 'http://schemas.datacontract.org/2004/07/MyApp.Client.Main.GUI.Report')添加命名空間xs:base64Binary()varbinary。
CONVERTxml。
WITH XMLNAMESPACES (DEFAULT 'http://schemas.datacontract.org/2004/07/MyApp.Client.Main.GUI.Report' /span>)
SELECT CONVERT(xml,
@xml.value(
'xs:base64Binary((/ReportHandler.ReportWrapper/Report/text())[1])'。
'varbinary(max)')
)
在
。SELECT表查詢中,用你的列名替換@xml
結果
<XtraReportsLayoutSerializer SerializerVersion="19. 2.7.0" Ref="0" ControlType="MyApp.Client.Main.GUI.Report.repReport, MyApp, Version=5.13.0. 20857, Culture=neutral, PublicKeyToken=null" Name="repReport" Margins="100, 80, 20。100" PaperKind="A4"/span> PageWidth="827" PageHeight="1169" Version="19。 2" RequestParameters="false" EventsInfo="remport,BeforePrint,remport_BeforePrint; repReport,DesignerLoaded,repReport_DesignerLoaded"><Bands> < Item1 Ref="1"/span> ControlType="DetailBand" Name="Detail" HeightF="206. 624985" TextAlignment="TopLeft" Padding="0,0,0,100" /> < Item2 Ref="2" ControlType="PageHeaderBand" Name="PageHeader" HeightF="30" TextAlignment="TopLeft" Padding="0。 0,0,0,100" /> < Item3 Ref="3" ControlType="PageFooterBand"/span> Name="PageFooter" HeightF="30" TextAlignment="TopLeft" Padding="0。 0,0,0,100" /> < Item4 Ref="4"/span> ControlType="TopMarginBand" Name="topMarginBand1" HeightF="20" /> < Item5 Ref="5"/span> ControlType="BottomMarginBand" Name="bottomMarginBand1" /> </Bands></XtraReportsLayoutSerializer>
如果你想的話,你也可以對這個結果使用XQuery。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324052.html
標籤:
上一篇:使視圖后面的按鈕不能點擊
