none
Datos XML RRS feed

  • Pregunta

  • Hola,

    Estoy realizando un consulta en sql server a una de mis tablas para devolver un resultado en XML, esta es mi consulta;

    SELECT [name]=[KEY], value = [INGLES]
    FROM RECURSOS AS data
    ORDER BY [KEY] ASC
    FOR  XML AUTO, TYPE;

    Los resultados;

    <data name="ID" value="001" />
    <data name="AccountNumber" value="number" />
    <data name="Status" value="Active" />
    

    Lo que necesito hacer es lo siguiente;

    <data name="ID"> <value>"001" </value> </data> <data name="AccountNumber"> <value>"number"</value> </data> <data name="Status"> <value>"Active"</value> </data>

    En ese caso, debo agregarle a mi consulta SQL estos caracteres de la siguiente forma;

    '<' + value = [INGLES] + '</value>'

    Pero esto no funciona;

    Necesito ayuda para que me funcione, la consulta completa quedaría de la siguiente manera;

    SELECT [name]=[KEY] '> <'/data'>', +'< ' + value = [INGLES] + '</value>'
    FROM RECURSOS AS data
    ORDER BY [KEY] ASC
    FOR  XML AUTO, TYPE;

    Cualquier orientación referente a esta situación, seria de gran ayuda.

    Desde ya muchas gracias.

    Saludos.


    N.C República Dominicana

    lunes, 3 de agosto de 2015 16:40

Respuestas

  • Hola,

    Puedes probar de esta manera:

    ;WITH X AS (
    SELECT DISTINCT
        [KEY]   
    FROM
        RECURSOS
    )
    , Y AS (
    SELECT DISTINCT
        [KEY],
    	[INGLES]    
    FROM
        RECURSOS
    )
    SELECT
        X.[KEY] AS [@name],    
        (
        SELECT
            Y.INGLES AS [@value]       
        FROM
            Y
        WHERE
            Y.[KEY] = X.[KEY]		
        FOR XML PATH('value'), ELEMENTS, TYPE
        )
    FROM
        X
    FOR XML PATH('data'), TYPE
    

    Salida:

    <data name="AccountNumber">
      <value value="number" />
    </data>
    <data name="ID">
      <value value="001" />
    </data>
    <data name="Status">
      <value value="Active" />
    </data>

    Si tienes una pregunta no dudes en hacerla.

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Teachs lunes, 3 de agosto de 2015 17:47
    lunes, 3 de agosto de 2015 17:10
  • Se podría poner name como Atributo y value como Texto,

    Podrías probar así:

    ;WITH X AS (
    SELECT DISTINCT
        [KEY]   
    FROM
        RECURSOS
    )
    , Y AS (
    SELECT DISTINCT
        [KEY],
    	[INGLES]    
    FROM
        RECURSOS
    )
    SELECT
        X.[KEY] AS [@name],    
        (
        SELECT
            Y.INGLES AS [value]       
        FROM
            Y
        WHERE
            Y.[KEY] = X.[KEY]		
        FOR XML PATH(''), ELEMENTS, TYPE
        ) 
    FROM
        X
    FOR XML PATH('data'), TYPE
    
    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Teachs lunes, 3 de agosto de 2015 18:38
    lunes, 3 de agosto de 2015 18:16

Todas las respuestas

  • Hola,

    Puedes probar de esta manera:

    ;WITH X AS (
    SELECT DISTINCT
        [KEY]   
    FROM
        RECURSOS
    )
    , Y AS (
    SELECT DISTINCT
        [KEY],
    	[INGLES]    
    FROM
        RECURSOS
    )
    SELECT
        X.[KEY] AS [@name],    
        (
        SELECT
            Y.INGLES AS [@value]       
        FROM
            Y
        WHERE
            Y.[KEY] = X.[KEY]		
        FOR XML PATH('value'), ELEMENTS, TYPE
        )
    FROM
        X
    FOR XML PATH('data'), TYPE
    

    Salida:

    <data name="AccountNumber">
      <value value="number" />
    </data>
    <data name="ID">
      <value value="001" />
    </data>
    <data name="Status">
      <value value="Active" />
    </data>

    Si tienes una pregunta no dudes en hacerla.

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Teachs lunes, 3 de agosto de 2015 17:47
    lunes, 3 de agosto de 2015 17:10
  • Excelente tu respuesta.

    Solo una cosa, en el resultado del XML veo que  el value se repita dos veces;

    <data name="AccountNumber">
      <value value="number" />
    </data>

    Como podemos quitarlo y dejar un solo value que es lo que realmente quiero, ademas que necesito cerrar la etiqueta del value de esta manera;

    <value>number</value>
    Desde ya muchas gracias.


    N.C República Dominicana


    • Editado Teachs lunes, 3 de agosto de 2015 18:05 Add new line
    lunes, 3 de agosto de 2015 17:49
  • Se podría poner name como Atributo y value como Texto,

    Podrías probar así:

    ;WITH X AS (
    SELECT DISTINCT
        [KEY]   
    FROM
        RECURSOS
    )
    , Y AS (
    SELECT DISTINCT
        [KEY],
    	[INGLES]    
    FROM
        RECURSOS
    )
    SELECT
        X.[KEY] AS [@name],    
        (
        SELECT
            Y.INGLES AS [value]       
        FROM
            Y
        WHERE
            Y.[KEY] = X.[KEY]		
        FOR XML PATH(''), ELEMENTS, TYPE
        ) 
    FROM
        X
    FOR XML PATH('data'), TYPE
    
    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Teachs lunes, 3 de agosto de 2015 18:38
    lunes, 3 de agosto de 2015 18:16
  • SteveMorrison,

    Muchas gracias, fue de gran ayuda tu respuesta.

    Saludos cordiales;

    NC.


    N.C República Dominicana

    lunes, 3 de agosto de 2015 18:39