[MS SQL 2005] Namespace toevoegen aan XML output

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Op dit moment heb ik de volgende query:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
with xmlnamespaces ('test' as test)
select
(
    select
        'woningen' '@name',
        (
            select  top 20
                convert(varchar(100),loc_x) '@x',
                convert(varchar(100),loc_y) '@y',
                cat '@label',
                'B10' '@test:p01'
            from
                table 
            for xml path('set'),
            type
        )
    for xml path('dataset'), type
)
for xml path('datasets'),
root('resultset'), type


en die levert het volgende resultaat:

code:
1
2
3
4
5
6
7
8
9
10
<resultset xmlns:test="test">
  <datasets>
    <dataset xmlns:test="test" name="woningen">
      <set xmlns:test="test" x="124034" y="405122" label="B10" test:p01="B10" />
      <set xmlns:test="test" x="131684" y="407216" label="B10" test:p01="B10" />
      <set xmlns:test="test" x="135891" y="376899" label="B10" test:p01="B10" />
      <set xmlns:test="test" x="136712" y="377288" label="B10" test:p01="B10" />
    </dataset>
  </datasets>
</resultset>


Maar wat ik nu eigenlijk wil is maar 1 namespace declaratie op de rootnode (resultset), in plaats van dat die bij ieder element die xmlns declaratie neerzet, dus dit moet ik eigenlijk hebben:

code:
1
2
3
4
5
6
7
8
9
10
<resultset xmlns:test="test">
  <datasets>
    <dataset name="woningen">
      <set x="124034" y="405122" label="B10" test:p01="B10" />
      <set x="131684" y="407216" label="B10" test:p01="B10" />
      <set x="135891" y="376899" label="B10" test:p01="B10" />
      <set x="136712" y="377288" label="B10" test:p01="B10" />
    </dataset>
  </datasets>
</resultset>


Alleen heb ik geen idee hoe ik dit in SQL kan aanpassen of manipuleren.
Heeft iemand een idee?

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Hier staat de uitleg en hier staan voorbeelden, waaronder een voorbeeld die lijkt op jouw query.

Volgens mij moet je gewoon een default namespace instellen.

code:
1
with xmlnamespaces ('test' as test, DEFAULT 'test')

Sundown Circus


  • DPLuS
  • Registratie: April 2000
  • Niet online
Werkt niet, volgens mij is het gewoon een bug in nested FOR XML queries:

http://www.sqlservercentr...775669-21-1.aspx#bm779402

https://connect.microsoft...ck.aspx?FeedbackID=265956

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

DPLuS schreef op zaterdag 26 september 2009 @ 14:26:
Werkt niet, volgens mij is het gewoon een bug in nested FOR XML queries:
Het lijkt er inderdaad op. :) Of het een bug is, vind ik discutabel, aangezien de query wel valide (maar natuurlijk nogal bloated) XML oplevert.

Sundown Circus