Sql server SQL Server 2008/2012未解析XML Soap
哦,多好的一天啊。我正在尝试在SQLServer中解析一些XML,以前我用过一些非常大的文件,但是对于这些文件,我遇到了最大的问题。实际上,我通过XML进行了递归解析,这样我就可以正确地识别所有的节点,所以我知道我并不疯狂 我的密码是这个Sql server SQL Server 2008/2012未解析XML Soap,sql-server,xml,soap,sqlxml,Sql Server,Xml,Soap,Sqlxml,哦,多好的一天啊。我正在尝试在SQLServer中解析一些XML,以前我用过一些非常大的文件,但是对于这些文件,我遇到了最大的问题。实际上,我通过XML进行了递归解析,这样我就可以正确地识别所有的节点,所以我知道我并不疯狂 我的密码是这个 DECLARE @XML XMl SELECT @XML = xmldata from testing where testingID = 3 select T.c.value('Legs[1]', 'varchar(100)') as Legs /*t.
DECLARE @XML XMl
SELECT @XML = xmldata from testing where testingID = 3
select T.c.value('Legs[1]', 'varchar(100)') as Legs
/*t.c.value('(PoolId)[1]', 'varchar(100)') as [Pool],
t.c.value('(./Model/@id)[1]', 'int') ModelID,
t.c.value('(./Note)[1]', 'varchar(100)') Note,
t.c.value('(./Part)[1]', 'varchar(15)') Part*/
from @xml.nodes('/Envelope/Body/GetEventDetailResponse/EventsResponse/EventDetail/Races/Race/Pools/Pool') as T(c)
我留下了一些旧代码,我知道这些代码可以毫无问题地处理旧XML文件,但我把它们注释掉了
XML就是这样
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetEventDetailResponse xmlns="http://schema.unitedtote.com/ToteLink/2008/06/Program">
<EventsResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<RunId xmlns="http://schema.unitedtote.com/ToteLink/2008/06/Common">2613</RunId>
<GroupId xmlns="http://schema.unitedtote.com/ToteLink/2008/06/Common">TH1</GroupId>
<Source xmlns="http://schema.unitedtote.com/ToteLink/2008/06/Common">
<SystemId>TSG</SystemId>
<SourceId>TH1TST</SourceId>
</Source>
<EventDetail>
<Races>
<Race>
<Pools>
<Pool>
<PoolId>WIN</PoolId>
<PoolNumber>1</PoolNumber>
<PoolName>Win</PoolName>
<PoolRaces>1</PoolRaces>
<Legs>1</Legs>
<Quick>true</Quick>
<Box>true</Box>
<SingleBetMinimum>2</SingleBetMinimum>
<MultipleBetMinimum>2</MultipleBetMinimum>
<WagerMinimum>2</WagerMinimum>
<Maximum>10000</Maximum>
<Probables>true</Probables>
<WBMaximum>10000</WBMaximum>
<Straight>true</Straight>
</Pool>
<Pool>
<PoolId>PLC</PoolId>
<PoolNumber>2</PoolNumber>
<PoolName>Place</PoolName>
<PoolRaces>1</PoolRaces>
<Legs>1</Legs>
<Quick>true</Quick>
<Box>true</Box>
<SingleBetMinimum>2</SingleBetMinimum>
<MultipleBetMinimum>2</MultipleBetMinimum>
<WagerMinimum>2</WagerMinimum>
<Maximum>10000</Maximum>
<WBMaximum>10000</WBMaximum>
<Straight>true</Straight>
</Pool>
<Pool>
<PoolId>EX</PoolId>
<PoolNumber>4</PoolNumber>
<PoolName>Exacta</PoolName>
<PoolRaces>1</PoolRaces>
<Legs>2</Legs>
<Quick>true</Quick>
<Wheel>true</Wheel>
<Box>true</Box>
<PowerBox>true</PowerBox>
<KeyWheel>true</KeyWheel>
<SingleBetMinimum>2</SingleBetMinimum>
<MultipleBetMinimum>1</MultipleBetMinimum>
<WagerMinimum>2</WagerMinimum>
<Maximum>10000</Maximum>
<WBMaximum>10000</WBMaximum>
<Straight>true</Straight>
</Pool>
</Race>
</Races>
<EventId>XVD</EventId>
<RunId>2613</RunId>
<EventName>Vaal</EventName>
<TrackId>XV</TrackId>
<TrackName>Vaal</TrackName>
<EventTime>2015-04-02T16:30:00</EventTime>
<EventInfo>2 Apr 15</EventInfo>
<EventType>Current</EventType>
<TrackType>Thoroughbred</TrackType>
<CurrencyId>USD</CurrencyId>
<EventStatus>Open</EventStatus>
<RaceList>1-8</RaceList>
<BreakTo>0.1</BreakTo>
</EventDetail>
</EventsResponse>
</GetEventDetailResponse>
2613
TH1
TSG
第1次
赢
1.
赢
1.
1.
真的
真的
2.
2.
2.
10000
真的
10000
真的
可编程逻辑控制器
2.
放置
1.
1.
真的
真的
2.
2.
2.
10000
10000
真的
前任
4.
精确的
1.
2.
真的
真的
真的
真的
真的
2.
1.
2.
10000
10000
真的
XVD
2613
瓦尔
十五
瓦尔
2015-04-02T16:30:00
4月2日15
现在的
纯种
美元
打开
1-8
0.1
这比在脚本级别编写解析例程要有效得多。您必须指定名称空间,如下所示:
;with xmlnamespaces(
'http://schemas.xmlsoap.org/soap/envelope/' as s,
default 'http://schema.unitedtote.com/ToteLink/2008/06/Program'
)
select
T.c.value('Legs[1]', 'varchar(100)') as Legs
from @xml.nodes('s:Envelope/s:Body/GetEventDetailResponse/EventsResponse/EventDetail/Races/Race/Pools/Pool') as T(c)