2015-10-07 102 views
-1

我需要在mysql数据库中存储xml字符串。我有多个记录,像这样的解析xml在mysql中存储数据

<Table1><c1><![CDATA[0001]]></c1><c2></c2><c3></c3><c4></c4><c5></c5><c6></c6><c7></c7><c8></c8><c9><![CDATA[na80]]></c9><c10><![CDATA[pp61]]></c10><c11><![CDATA[uc131]]></c11><c12><![CDATA]></c12><c13><![CDATA[سکول]]></c13><c14><![CDATA[25-May-13 12:00:00 AM]]></c14><c15><![CDATA[True]]></c15><c16></c16><c17><![CDATA[1]]></c17><c18><![CDATA[1867]]></c18><c19><![CDATA[0]]></c19><c20><![CDATA[1867]]></c20><c21></c21></Table1> 
+2

你想用这个XML做什么。请清楚说明。你想要将每个XML标签值存储在不同的列中吗? – kinshuk4

+0

不知道MySQL如何处理这个问题,但是你的一个CDATA节错过了内部[] ... SQL Server会引发错误... – Shnugo

+0

“多个记录”是什么意思?如果“Table1”是你的根标签,那么也应该有一种行标签呢? – Shnugo

回答

0

你的问题还不清楚......

这是怎么选SQL Server中的价值观,我不知道在MySQL中的语法,但它会类似。

将数据类型(varchar(max))更改为任何所需的类型。

DECLARE @xml XML= 
'<Table1><c1><![CDATA[0001]]></c1><c2></c2><c3></c3><c4></c4><c5></c5><c6></c6><c7></c7><c8></c8><c9><![CDATA[na80]]></c9><c10><![CDATA[pp61]]></c10><c11><![CDATA[uc131]]></c11><c12><![CDATA[]]></c12><c13><![CDATA[سکول]]></c13><c14><![CDATA[25-May-13 12:00:00 AM]]></c14><c15><![CDATA[True]]></c15><c16></c16><c17><![CDATA[1]]></c17><c18><![CDATA[1867]]></c18><c19><![CDATA[0]]></c19><c20><![CDATA[1867]]></c20><c21></c21></Table1>'; 
SELECT x.y.value('c1[1]','varchar(max)') AS c1 
     ,x.y.value('c2[1]','varchar(max)') AS c2 
     ,x.y.value('c3[1]','varchar(max)') AS c3 
     ,x.y.value('c4[1]','varchar(max)') AS c4 
     ,x.y.value('c5[1]','varchar(max)') AS c5 
     ,x.y.value('c6[1]','varchar(max)') AS c6 
     ,x.y.value('c7[1]','varchar(max)') AS c7 
     ,x.y.value('c8[1]','varchar(max)') AS c8 
     ,x.y.value('c9[1]','varchar(max)') AS c9 
     ,x.y.value('c10[1]','varchar(max)') AS c10 
     ,x.y.value('c11[1]','varchar(max)') AS c11 
     ,x.y.value('c12[1]','varchar(max)') AS c12 
     ,x.y.value('c13[1]','varchar(max)') AS c13 
     ,x.y.value('c14[1]','varchar(max)') AS c14 
     ,x.y.value('c15[1]','varchar(max)') AS c15 
     ,x.y.value('c16[1]','varchar(max)') AS c16 
     ,x.y.value('c17[1]','varchar(max)') AS c17 
     ,x.y.value('c18[1]','varchar(max)') AS c18 
     ,x.y.value('c19[1]','varchar(max)') AS c19 
     ,x.y.value('c20[1]','varchar(max)') AS c20 
     ,x.y.value('c21[1]','varchar(max)') AS c21 

FROM @xml.nodes('/Table1') AS x(y); 
+0

的确如我所做的那样SELECT data.value('c1 [1]','varchar(4)'), data.value('c2 [1]','nVARCHAR(max)' ), data.value('c3 [1]','nVARCHAR(max)'), data.value('c4 [1]','nVARCHAR(max)'), data.value('c5 [ 1'','nVARCHAR(max)'), data.value('c6 [1]','nVARCHAR(max)'), data.value('c7 [1]','nVARCHAR(max)' ), 从@ XML_SIDetails.nodes('/ Table1')AS.ParamValues(data)' 现在我需要在mysql中做同样的事情但是mysql的语法并不清楚。 – Kamran

+0

@Kamran,我不使用MySQL。我在快速研究中发现的是:http://stackoverflow.com/q/11281436/5089204。希望这可以帮助你...如果我的答案可以帮助你,请投票! – Shnugo