Sql操作带命名空间的xml

之前一直操作的xml是没有namespace的。这种xml使用XPath来查询是非常方便的。而当xml中某一个节点定义了namespace,那么之前常用的方法就查询不出来数据了,因此需要在节点前面加上前缀,如下:

DECLARE @xml XML
SET @xml=N'
<Project xmlns="http://www.neweggtest.com">
  <Subject xmlns="http://www.neweggtest/mytest.com">
      <Node name="node1">
            <title>T11</title>
            <title>T12</title>
      </Node>
      <Node name="node2" xmls="">
            <title>T21</title>
            <title>T22</title>
      </Node>
  </Subject>
</Project>'

;WITH XMLNAMESPACES(
    'http://www.neweggtest.com' AS xnp,
    'http://www.neweggtest/mytest.com' AS xn
)

SELECT 
    T.[C].value('(../@name)[1]','VARCHAR(20)') AS Name,
    T.[C].value('(.)[1]','VARCHAR(20)') AS Title
FROM @xml.nodes('/xnp:Project/xn:Subject/xn:Node/xn:title') AS T([C])

 

 

posted @ 2012-12-20 16:57  Bart Li  阅读(361)  评论(0编辑  收藏  举报