SQL Server的OpenXML函数可以针对XML片段或者文档进行解析,并处理。有关资料,你可以参考http://msdn.microsoft.com/en-us/library/ms186918.aspx

但如果该片段含有命名空间,情况可能会复杂一点。例如下面这个例子

第一部分:XML的内容

使用SQL Server的OpenXML解析带有命名空间的XML片段_xml使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_02Code
 1使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03<?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>
 2使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03<p1:ProductDescription xmlns:p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns:wm="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" xmlns:wf="http://www.adventure-works.com/schemas/OtherFeatures" xmlns:html="http://www.w3.org/1999/xhtml" ProductModelID="19" ProductModelName="Mountain 100">
 3使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <p1:Summary>
 4使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <html:p>Our top-of-the-line competition mountain bike. 
 5使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                 Performance-enhancing options include the innovative HL Frame, 
 6使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                super-smooth front suspension, and traction for all terrain.
 7使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                        </html:p>
 8使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  </p1:Summary>
 9使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <p1:Manufacturer>
10使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:Name>AdventureWorks</p1:Name>
11使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:Copyright>2002</p1:Copyright>
12使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>
13使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  </p1:Manufacturer>
14使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <p1:Features>These are the product highlights. 
15使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                 <wm:Warranty><wm:WarrantyPeriod>3 years</wm:WarrantyPeriod><wm:Description>parts and labor</wm:Description></wm:Warranty><wm:Maintenance><wm:NoOfYears>10 years</wm:NoOfYears><wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description></wm:Maintenance><wf:wheel>High performance wheels.</wf:wheel><wf:saddle><html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle><wf:pedal><html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal><wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter 
16使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                and wall-thickness required of a premium mountain frame. 
17使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame><wf:crankset> Triple crankset; alumunim crank arm; flawless shifting. </wf:crankset></p1:Features>
18使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <!-- add one or more of these elements使用SQL Server的OpenXML解析带有命名空间的XML片段_html_21 one for each specific product in this product model -->
19使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <p1:Picture>
20使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:Angle>front</p1:Angle>
21使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:Size>small</p1:Size>
22使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03    <p1:ProductPhotoID>118</p1:ProductPhotoID>
23使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  </p1:Picture>
24使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <!-- add any tags in <specifications> -->
25使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03  <p1:Specifications> These are the product specifications.
26使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03                   <Material>Almuminum Alloy</Material><Color>Available in most colors</Color><ProductLine>Mountain bike</ProductLine><Style>Unisex</Style><RiderExperience>Advanced to Professional riders</RiderExperience></p1:Specifications>
27使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03</p1:ProductDescription> 
28使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_03

 

第二部分:查询语法

 

 1使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32DECLARE @XML XML
 2使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32DECLARE @HANDLER INT
 3使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32SELECT @XML=CatalogDescription FROM Production.ProductModel WHERE ProductModelID=19 
 4使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32
 5使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32EXEC SP_XML_PREPAREDOCUMENT @HANDLER OUTPUT,@XML,'<root xmlns:p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" />' 
 6使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32
 7使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32--这里要为PREPAREDOCUMENT存储过程加入第三个参数,就是命名空间的声明 
 8使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32
 9使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32SELECT * FROM OPENXML(@HANDLER,'/p1:ProductDescription/p1:Manufacturer',2WITH ([Name] NVARCHAR(50'p1:Name',CopyRight NVARCHAR(50'p1:Copyright'
10使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32
11使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32EXEC SP_XML_REMOVEDOCUMENT @HANDLER  --一定不要忘记REMOVE 
12使用SQL Server的OpenXML解析带有命名空间的XML片段_sql_32

 

第三部分:显示结果(这是我写的一个小的演示工具)

使用SQL Server的OpenXML解析带有命名空间的XML片段_ide_44