Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 XML split problem

Author  Topic 

maevr
Posting Yak Master

169 Posts

Posted - 2008-10-14 : 05:27:10
I need to split this xml sample into separate tables (IdByggnadRad and IdAdressRad) with keys so that I can connect them to each other using primary key and foreign keys.
IdByggnadRad can contain multiple instances and IdAdressRad can contain multiple instances.
The xml has a primary key tag named deklid that is unique for the whole xml document.

<my:IdByggnadRad>
<my:IdHusnr>1</my:IdHusnr>
<my:IdById>757114</my:IdById>
<my:IdAdress>
<my:IdAdressRad>
<my:IdAdr>Scheffersgatan a1</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
<my:IdAdressRad>
<my:IdAdr>Svedbergsplan a2</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
<my:IdAdressRad>
<my:IdAdr>Svedbergsplan a3</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
<my:IdAdressRad>
<my:IdAdr>Wennerbergsgatan a4</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
</my:IdAdress>
</my:IdByggnadRad>
<my:IdByggnadRad>
<my:IdHusnr>2</my:IdHusnr>
<my:IdById>794655</my:IdById>
<my:IdAdress>
<my:IdAdressRad>
<my:IdAdr>Scheffersgatan x1</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
<my:IdAdressRad>
<my:IdAdr>Wennerbergsgatan x2</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
<my:IdAdressRad>
<my:IdAdr>Wennerbergsgatan x3</my:IdAdr>
<my:IdPostnr>11258</my:IdPostnr>
<my:IdPostort>Stockholm</my:IdPostort>
</my:IdAdressRad>
</my:IdAdress>
</my:IdByggnadRad>



How can I do this, Im currently using the code below to split the xml but it does not work with the new version of the xml document using sublevels on IdAdressRad.
------------------------------------------
CREATE VIEW [dbo].[DeklIdByggnadXml] AS
WITH XMLNAMESPACES('http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-15T13:29:33' AS my)
SELECT DeklId, TempTabell.TempKolumn.query('.') AS IdByggnadRad
FROM TMP_MinaDekl
CROSS APPLY FormData.nodes('/my:Energideklaration/my:Formular/my:IdByggnad/my:IdByggnadRad')
AS TempTabell(TempKolumn)
------------------------------------------

------------------------------------------
ALTER PROCEDURE [dbo].[usp_InsertTmpIdByggnad]
AS
WITH xmlnamespaces('http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-15T13:29:33' AS my)
INSERT INTO TMP_BYGGNAD(deklId, IdHusnr, IdPrefixById, IdById, IdXkoordinat, IdYkoordinat, IdAdress, IdPostnr, IdPostort, Antal)
SELECT DeklId,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdHusnr)[1]', 'varchar(4)') AS IdHusnr,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdPrefixById)[1]', 'varchar(4)') AS IdPrefixById ,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdById)[1]', 'varchar(10)') AS IdById ,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdXkoordinat)[1]', 'varchar(11)') AS IdXkoordinat ,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdYkoordinat)[1]', 'varchar(11)') AS IdYkoordinat ,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdAdress)[1]', 'varchar(35)') AS IdAdress,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdPostnr)[1]', 'varchar(10)') AS IdPostnr,
IdByggnadRad.value('(/my:IdByggnadRad/my:IdPostort)[1]', 'varchar(27)') AS IdPostort,
1
FROM dbo.DeklIdByggnadXml
------------------------------------------

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2008-11-04 : 15:56:07
[code]DECLARE @xml XML

SET @xml = '<Deklid>
<IdByggnadRad>
<IdHusnr>1</IdHusnr>
<IdById>757114</IdById>
<IdAdress>
<IdAdressRad>
<IdAdr>Scheffersgatan a1</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
<IdAdressRad>
<IdAdr>Svedbergsplan a2</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
<IdAdressRad>
<IdAdr>Svedbergsplan a3</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
<IdAdressRad>
<IdAdr>Wennerbergsgatan a4</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
</IdAdress>
</IdByggnadRad>
<IdByggnadRad>
<IdHusnr>2</IdHusnr>
<IdById>794655</IdById>
<IdAdress>
<IdAdressRad>
<IdAdr>Scheffersgatan x1</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
<IdAdressRad>
<IdAdr>Wennerbergsgatan x2</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
<IdAdressRad>
<IdAdr>Wennerbergsgatan x3</IdAdr>
<IdPostnr>11258</IdPostnr>
<IdPostort>Stockholm</IdPostort>
</IdAdressRad>
</IdAdress>
</IdByggnadRad>
</Deklid>'

SELECT t.c.value('IdHusnr[1]', 'varchar(4)') AS IdHusnr,
t.c.value('IdById[1]', 'varchar(10)') AS IdById,
p.l.value('IdAdr[1]', 'varchar(35)') AS IdAdr,
p.l.value('IdPostnr[1]', 'varchar(10)') AS IdPostnr,
p.l.value('IdPostort[1]', 'varchar(27)') AS IdPostort
FROM @xml.nodes('/Deklid/IdByggnadRad') AS t(c)
CROSS APPLY t.c.nodes('IdAdress/IdAdressRad') AS p(l)[/code]

E 12°55'05.63"
N 56°04'39.26"
Go to Top of Page
   

- Advertisement -