从XML查询属性

来源:互联网 发布:调整优化aso 编辑:程序博客网 时间:2024/05/23 01:26

以下为一位同事服务器上保存的某LOG,格式为TXT

需要解析成如下格式的数据

/*

col_time                                      catName           NodeNmae      value

-------------------------------------------------    ---------     ------------- ---------

 00000001 20100708-090744 Stat     00400000 0B8       lv3           SpeedIndi2    1

 00000001 20100708-090744 Stat     00400000 0B8       lv3           SpeedIndi3    1

........................

 

 

*/

TXT 文件如下格式

/*

*-*-*-*-*-* <begin type='ordinal localTime srcKey type msg' tz='8' time='20100708-070740' uuid='2cae351f-ab2d-4b4c-9f39-815aeccc6fbb'/>

 00000001 20100708-090744 Stat     00400000 0B8 <LgGameCount catName='lv3' SpeedIndi2='1' SpeedIndi3='1' SpeedTeam2='2' ItemTeam8='1' BattleTeam4='2' DeadRacingTeam2='7' DeadRacingTeam4='2' DeadRacingTeam7='2' DeadRacingTeam8='6' />

 00000002 20100708-090744 Stat     00400000 0BD <LgGameCount catName='lv3' SpeedIndil3='4' SpeedIndil2='1' SpeedTeaml3='3' SpeedTeaml1='1' ItemTeaml3='8' BattleTeaml3='8' DeadRacingTeaml3='75' DeadRacingTeaml2='8' DeadRacingTeaml1='1' />

........................

 0000001D 20100708-230742 Stat     00400000 303 <LgGameCount catName='lv3' SpeedIndi1='13' SpeedIndi2='575' SpeedIndi3='142' SpeedIndi4='64' SpeedIndi5='44' SpeedIndi6='30' SpeedIndi7='49' SpeedIndi8='96' ItemIndi1='6' ItemIndi2='194' ItemIndi3='55' ItemIndi4='64' ItemIndi5='14' ItemIndi6='30' ItemIndi7='73' ItemIndi8='278' SpeedTeam1='30' SpeedTeam2='710' SpeedTeam3='8' SpeedTeam4='159' SpeedTeam5='14' SpeedTeam6='79' SpeedTeam7='91' SpeedTeam8='695' ItemTeam1='5' ItemTeam2='91' ItemTeam3='4' ItemTeam4='46' ItemTeam5='2' ItemTeam6='57' ItemTeam7='85' ItemTeam8='899' BattleTeam1='17' BattleTeam2='337' BattleTeam3='361' BattleTeam4='1216' DeadRacingTeam1='14' DeadRacingTeam2='1055' DeadRacingTeam3='11' DeadRacingTeam4='198' DeadRacingTeam5='9' DeadRacingTeam6='95' DeadRacingTeam7='79' DeadRacingTeam8='999' />

 0000001E 20100708-230742 Stat     00400000 189 <LgGameCount catName='lv3' SpeedIndil3='2263' SpeedIndil2='737' SpeedIndil1='356' ItemIndil3='3522' ItemIndil2='174' ItemIndil1='104' SpeedTeamrookie='6' SpeedTeaml3='6764' SpeedTeaml2='1001' SpeedTeaml1='1080' ItemTeaml3='7442' ItemTeaml2='713' ItemTeaml1='367' BattleTeaml3='6201' BattleTeaml2='346' BattleTeaml1='91' DeadRacingTeaml3='10456' DeadRacingTeaml2='913' DeadRacingTeaml1='740' />

 0000001F 20100709-000036 Stat     00400000 2D9 <LgGameCount catName='lv3' SpeedIndi1='4' SpeedIndi2='151' SpeedIndi3='98' SpeedIndi4='46' SpeedIndi5='24' SpeedIndi6='9' SpeedIndi7='13' SpeedIndi8='16' ItemIndi1='4' ItemIndi2='105' ItemIndi3='36' ItemIndi4='15' ItemIndi5='6' ItemIndi6='12' ItemIndi7='35' ItemIndi8='58' SpeedTeam1='9' SpeedTeam2='297' SpeedTeam3='8' SpeedTeam4='108' SpeedTeam5='3' SpeedTeam6='50' SpeedTeam7='38' SpeedTeam8='216' ItemTeam1='4' ItemTeam2='25' ItemTeam4='27' ItemTeam6='15' ItemTeam7='23' ItemTeam8='375' BattleTeam1='6' BattleTeam2='85' BattleTeam3='129' BattleTeam4='380' DeadRacingTeam1='3' DeadRacingTeam2='435' DeadRacingTeam3='4' DeadRacingTeam4='77' DeadRacingTeam5='4' DeadRacingTeam6='37' DeadRacingTeam7='25' DeadRacingTeam8='274' />

*-*-*-*-*-* <end time='20100709-000036' uuid='2cae351f-ab2d-4b4c-9f39-815aeccc6fbb' continue='true'/>

*/

 

下面是处理代码

 

 

--TXT文件导入表中

IF OBJECT_ID('[logTB]') IS NOT NULL

DROP TABLE logTB

GO

 

CREATE  TABLE logTB(detail VARCHAR(MAX))

GO

 

 

BULK INSERT logTB

FROM 'c:/crm log.txt'

 

GO

--删除文件的头尾行

DELETE FROM logTB WHERE detail like '*-*-*-*-*-*%'

go

 

--把文件解析成XML格式导入表中

IF OBJECT_ID('TEMPDB..#t1') IS NOT NULL

DROP TABLE #t1

GO

 

SELECT  CONVERT(VARCHAR(MAX),LEFT(detail,PATINDEX('%<%',detail)-1)) as t1,

CONVERT(XML,RIGHT(detail,LEN(detail)-PATINDEX('%<%',detail)+1)) as t2

into #t1

from logTB

 

 

--解析成对应的格式

 

select

t1

,t2.value('(LgGameCount/@catName)[1]','varchar(20)') as catName

,C.value('local-name(.)','varchar(200)') as NodeNmae

,C.value('.','varchar(max)')  as value

from #t1  cross apply t2.nodes('/*/@*[local-name()!="catName"]') T(C)

 

 

 

/*

t1                                               catName              NodeNmae              value

-------------------------------------------------       -----------          ---------------           --------

 00000001 20100708-090744 Stat     00400000 0B8           lv3               SpeedIndi2            1

 00000001 20100708-090744 Stat     00400000 0B8           lv3               SpeedIndi3            1

 00000001 20100708-090744 Stat     00400000 0B8           lv3               SpeedTeam2            2

 ...............                                                                      

 0000001F 20100709-000036 Stat     00400000 2D9           lv3               DeadRacingTeam7          25

 0000001F 20100709-000036 Stat     00400000 2D9           lv3               DeadRacingTeam8          274

 

(938 行受影响)

*/