代码之家  ›  专栏  ›  技术社区  ›  npalle

SQL Server删除命名空间默认值

  •  0
  • npalle  · 技术社区  · 7 年前

    我在sql 2008 server上使用Xquery,结果包含自动生成的命名空间前缀(示例p1:)。我使用的是默认名称空间。

    如何删除它们?

    示例/流程:

    1-

    SET @ROOMLIST='
              <RoomList>
               <Root xmlns="http://zzz.yyy.com" >
                 <RoomInfo>
                    <AdultNum>2</AdultNum>
                    <ChildNum>2</ChildNum>
                    <ChildAges>
                       <ChildAge age="1"/>
                      <ChildAge age="12"/>
                    </ChildAges>
                 </RoomInfo>
              </Root>
          </RoomList>'
    

    2-SQL查询:

    declare @rt table (roomno int, Can_Adl int, Can_Chd int, ChildAges xml)
    ;WITH XMLNAMESPACES(DEFAULT 'http://zzz.yyy.com')
        insert into @rt (Can_Adl,Can_Chd,ChildAges)
        select  r.value('(AdultNum/text())[1]','int') as CAN_ADL,
                r.value('(ChildNum/text())[1]','int') as CAN_CHD,
                r.query('ChildAges') as ChildAges
    
        from @ROOMLIST.nodes('//RoomInfo') as t(r)
        outer apply (select t.r.query('ChildAges') as c) qlo
    

    3-结果:

    <p1:ChildAges xmlns:p1="http://zzz.yyy.com">
       <p1:ChildAge age="1" />
       <p1:ChildAge age="12" />
    </p1:ChildAges>
    

    我想得到:

    <ChildAges xmlns="http://zzz.yyy.com">
       <ChildAge age="1" />
       <ChildAge age="12" />
    </ChildAges>
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   npalle    7 年前

    我找到了解决方案:

       r.query('declare default element namespace 
       "http://zzz.yyy.com";.') as ChildAges
    

    SQL查询:

       ;WITH XMLNAMESPACES(DEFAULT 'http://zzz.yyy.com' )
        insert into @rt (Can_Adl,Can_Chd,ChildAges)
    
        select  r.value('(//AdultNum)[1]','int') as Can_Adl,
                r.value('(//ChildNum)[1]','int') as Can_Chd,
                r.query('declare default element 
                namespace"http://zzz.yyy.com";.') as ChildAges
        from @ROOMLIST.nodes('//ChildAges') as t(r)