zickno
zickno

Reputation: 115

Read and split XML repeated tags in sql server

I have this XML

<Flujo>
<nodes>
<Nombre>QWERTY</Nombre>
<NombreProceso>Nodo 2</NombreProceso>
<ProcesoTipo>4</ProcesoTipo>
<SolicitudTipo>1</SolicitudTipo>
<Rol>Ejecutivo de plaza: 1</Rol>
<Rol>Supervisor de creditos: 2</Rol>
<Rol>Supervisor de tesoreria: 2</Rol>
</nodes>
</Flujo>

I can read it but I just get one tag. after that I would like to split each tag to get this

        Rol                   Permiso
 Ejecutivo de Plaza              1
 Supervisor de creditos          2
Supervisor de tesoreria          2

any clue?

Thanks

Upvotes: 2

Views: 136

Answers (1)

Abhilash R Vankayala
Abhilash R Vankayala

Reputation: 693

You could do this using xquery path, below is the sql code to get your expected output

        DECLARE @xml xml
        SET @xml = 
        '<Flujo>
        <nodes>
        <Nombre>QWERTY</Nombre>
        <NombreProceso>Nodo 2</NombreProceso>
        <ProcesoTipo>4</ProcesoTipo>
        <SolicitudTipo>1</SolicitudTipo>
        <Rol>Ejecutivo de plaza: 1</Rol>
        <Rol>Supervisor de creditos: 2</Rol>
        <Rol>Supervisor de tesoreria: 2</Rol>
        </nodes>
        </Flujo>'




        SELECT  
        SUBSTRING(b.value('(./text())[1]','varchar(50)'),1,CHARINDEX(':',b.value('(./text())[1]','varchar(50)'))-1) Rol,
        SUBSTRING(b.value('(./text())[1]','varchar(50)'),CHARINDEX(':',b.value('(./text())[1]','varchar(50)'))+1,LEN(b.value('(./text())[1]','varchar(50)'))) Permiso 
        FROM @xml.nodes('/Flujo/nodes/Rol') as a(b) 

Upvotes: 2

Related Questions