首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL解析XML具体元素的属性解决方案

2013-06-25 
SQL解析XML具体元素的属性DECLARE @myDoc XMLDECLARE @imyDoc INTSET @myDoc IpListStartIP1.1.1.1

SQL解析XML具体元素的属性

DECLARE @myDoc XML
DECLARE @imyDoc INT 
 SET @myDoc = '<IpList>     
 <StartIP>1.1.1.1</StartIP> 
 <EndIP>2.2.2.2</EndIP>
</IpList>'
EXECUTE SP_XML_PREPAREDOCUMENT @imyDoc OUTPUT, @myDoc 
Create table #XMLa        
 (            
 StartIP varchar(100),        
 EndIP varchar(500)    
 )      
 INSERT INTO #XMLa SELECT * 
  FROM OPENXML (@imyDoc, '@myDoc', 1) 
  WITH(StartIP char(100) 'StartIP',EndIP varchar(100) 'EndIP') 
  
 EXECUTE SP_XML_REMOVEDOCUMENT @imyDoc
go 
select * from #XMLa

 drop table #XMLa


如代码。这段xml很好解析就这样写就可以解析出来,但是现在我遇到麻烦了,真正的xml结构是这样的
<EthernetLink>  
<HubSpoke>H</HubSpoke>  
<IsCustomerWANIP>N</IsCustomerWANIP>  
<LAN_IP NormalRADCE="I" />  
<RAD_CE_IP Type="Yes" NormalRADCE="R" /> 
<MegapopIPAddress>   
<InternetProtocol>IPv4</InternetProtocol>    
<WanIP>Yes</WanIP>    
<NetworkInformation>Static IP</NetworkInformation>  
<IpList>     
 <IP StartIP="1.1.1.1" EndIP="2.2.2.2" />    
</IpList>    
<WanIpProviderEndIP>3.3.3.3</WanIpProviderEndIP>   
<WanIpCustomerEndIP>4.4.4.4</WanIpCustomerEndIP>    
<IsIsp>false</IsIsp>    
<Bgp>false</Bgp>  
</MegapopIPAddress>
</EthernetLink>"

其中<IpList>     
 <IP StartIP="1.1.1.1" EndIP="2.2.2.2" />    
</IpList>   是作为元素属性存在的,现在跪求各位高手指点下这个怎么解析出来?急求 XML SQL
[解决办法]
http://www.cnblogs.com/zhengyun_ustc/archive/2006/06/29/sqlxml_forxmlexplicit.html
[解决办法]

declare @myDoc xml

set @myDoc = '<EthernetLink>  
<HubSpoke>H</HubSpoke>  
<IsCustomerWANIP>N</IsCustomerWANIP>
<LAN_IP NormalRADCE="I"></LAN_IP>  
<RAD_CE_IP Type="Yes" NormalRADCE="R"></RAD_CE_IP> 
<MegapopIPAddress>
<InternetProtocol>IPv4</InternetProtocol>    
<WanIP>Yes</WanIP>    
<NetworkInformation>Static IP</NetworkInformation>  


<IpList>     
 <IP StartIP="1.1.1.1" EndIP="2.2.2.2" />    
</IpList>    
<WanIpProviderEndIP>3.3.3.3</WanIpProviderEndIP>   
<WanIpCustomerEndIP>4.4.4.4</WanIpCustomerEndIP>    
<IsIsp>false</IsIsp>    
<Bgp>false</Bgp>  
</MegapopIPAddress>
</EthernetLink>'

create table #XMLa 
(StartIP varchar(20),
 EndIP varchar(20))

insert into #XMLa
 select T.c.value('@StartIP[1]', 'varchar(20)'),
        T.c.value('@EndIP[1]', 'varchar(20)')
 from @myDoc.nodes('/EthernetLink/MegapopIPAddress/IpList/IP') T(c)


select * from #XMLa

/*
StartIP              EndIP
-------------------- --------------------
1.1.1.1              2.2.2.2

(1 row(s) affected)
*/

热点排行