Analyser XML dans SQL Server
Le XML ressemble à ceci:
<GespeicherteDaten>
<strategieWuerfelFelder Type="strategieWuerfelFelder">
<Felder X="3" Y="3" Z="3">
<Feld X="1" Y="1" Z="1">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name</Name>
<Beschreibung>Test</Beschreibung>
</strategieWuerfelFeld>
</Feld>
<Feld X="1" Y="1" Z="2">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name2</Name>
<Beschreibung>Test2</Beschreibung>
</strategieWuerfelFeld>
</Feld>
</Felder>
</strategieWuerfelFelder>
</GespeicherteDaten>'
Ma table de résultats doit contenir les attributs Felder- > X, Y, Z, Feld- > X, Y, Z et Name.
Comme:
Felder_X | Felder_Y | Felder_Z | Feld_X | Feld_Y | Feld_Z | Name
Est-il possible d'obtenir ces valeurs directement à partir d'une requête ou une procédure stockée?
21
demandé sur
Mikael Eriksson
2013-03-28 15:10:21
2 réponses
DECLARE @xml xml
SET @xml =
'<GespeicherteDaten>
<strategieWuerfelFelder Type="strategieWuerfelFelder">
<Felder X="3" Y="3" Z="3">
<Feld X="1" Y="1" Z="1">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name</Name>
<Beschreibung>Test</Beschreibung>
</strategieWuerfelFeld>
</Feld>
<Feld X="1" Y="1" Z="2">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name2</Name>
<Beschreibung>Test2</Beschreibung>
</strategieWuerfelFeld>
</Feld>
</Felder>
</strategieWuerfelFelder></GespeicherteDaten>'
SELECT
b.value('@X', 'int') as X
, b.value('@Y', 'int') as Y
, b.value('@Z', 'int') as Z
, b.value('(./strategieWuerfelFeld/Name/text())[1]','Varchar(50)') as [Name]
, b.value('../@X','int') as Felder_X
, b.value('../@Y','int') as Felder_Y
, b.value('../@Z','int') as Felder_Z
FROM @xml.nodes('/GespeicherteDaten/strategieWuerfelFelder/Felder/Feld') as a(b)
30
répondu
bummi
2013-03-28 12:14:08
declare @XML xml
set @XML = '
<GespeicherteDaten>
<strategieWuerfelFelder Type="strategieWuerfelFelder">
<Felder X="3" Y="3" Z="3">
<Feld X="1" Y="1" Z="1">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name</Name>
<Beschreibung>Test</Beschreibung>
</strategieWuerfelFeld>
</Feld>
<Feld X="1" Y="1" Z="2">
<strategieWuerfelFeld Type="strategieWuerfelFeld">
<Name>Name2</Name>
<Beschreibung>Test2</Beschreibung>
</strategieWuerfelFeld>
</Feld>
</Felder>
</strategieWuerfelFelder>
</GespeicherteDaten>'
select Felder.N.value('@X', 'int') as Felder_X,
Felder.N.value('@Y', 'int') as Felder_Y,
Felder.N.value('@Z', 'int') as Felder_Z,
Feld.N.value('@X', 'int') as Feld_X,
Feld.N.value('@Y', 'int') as Feld_Y,
Feld.N.value('@Z', 'int') as Feld_Z,
Feld.N.value('(strategieWuerfelFeld/Name/text())[1]', 'nvarchar(100)') as Name
from @XML.nodes('/GespeicherteDaten/strategieWuerfelFelder/Felder') as Felder(N)
cross apply Felder.N.nodes('Feld') as Feld(N)
Résultat:
Felder_X Felder_Y Felder_Z Feld_X Feld_Y Feld_Z Name
----------- ----------- ----------- ----------- ----------- ----------- ---------
3 3 3 1 1 1 Name
3 3 3 1 1 2 Name2
6
répondu
Mikael Eriksson
2013-03-28 12:06:10