前几天一个小活,基于性能考虑到使用Sqlserver2008中用XQuery的方式来解析XML数据,
感觉相当不错。
Declare @XMLData xml
Set @XMLData = '<source>
<student id="001" name="张三">
<语文>1</语文>
<数学>2</数学>
<地理>3</地理>
<生物>4</生物>
<物理>5</物理>
<化学>6</化学>
</student>
<student id="002" name="李四">
<语文>101</语文>
<数学>2</数学>
<地理>3</地理>
<生物>4</生物>
<物理>5</物理>
<化学>6</化学>
</student>
<student id="003" name="王五">
<语文>102</语文>
<数学>2</数学>
<地理>3</地理>
<生物>4</生物>
<物理>5</物理>
<化学>6</化学>
</student>
<student id="005" name="黑六">
<语文>103</语文>
<数学>2</数学>
<地理>3</地理>
<生物>4</生物>
<物理>5</物理>
<化学>6</化学>
</student>
</source>'
Select
c.value('../@id','varchar(50)') as '学号' , CONVERT( varchar(50) , c.query('fn:local-name(.)') ) as '科目' , CONVERT( varchar(50) , c.query('text()') ) as '成绩'
From @XMLData.nodes('source/*/*') as t(c)
SELECT @XMLData.query('for $s in //source/student/* return <student><Subject key="{local-name($s)}"></Subject></student>')
这样轻松就把一个多维的XML转换为了我们常用的数据表,并且可以轻松的使用它来为我们服务。比起传统的到客户端再解析,简直方便多了