es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccionar tagName y tagValue de Xml.

Con una consulta en Sql Server 2008 me gustaría extraer tagName y tagValue de un xml, pero sólo puedo recuperar el tagValue.
Me gustaría extraerlos dinámicamente, ya que los nombres de las etiquetas podrían cambiar.
Cualquier ayuda es apreciada.

Este es el código:
DECLARE @test AS XML=’ Blah Blah2 Blah3 80000011b TheEnd 10100 TestName ‘;

SELECT
PROPERTY.N.value(‘local-name(.)’, ‘varchar(max)’) AS TagName
,PROPERTY.N.value(‘.’, ‘nvarchar(100)’) AS TagValue
FROM
(SELECT CAST(@test AS XML) Prop ) XML
OUTER APPLY XML.Prop.nodes(‘/properties/*’) AS PROPERTY(N);

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para extraer tanto el nombre como el valor de la etiqueta desde el XML de forma dinámica (en caso de que los nombres de las etiquetas cambien), puedes usar la función local-name() en combinación con la función value().

    Aquí tienes un ejemplo de consulta que extraerá el nombre y valor de la etiqueta para cada propiedad en el XML:

    DECLARE @test AS XML = '
    <properties>
      <property key="FirstProp">Blah</property>
      <property key="SecondProp">Blah2</property>
      <property key="ThirdProp">Blah3</property>
      <property key="Other">80000011b</property>
      <property key="Another">TheEnd</property>
      <property key="MoreDIfficult">
        <structure type=""></structure>
      </property>
    </properties>
    ';
    
    SELECT
        PROPERTY.N.value('local-name(.)', 'varchar(max)') AS NombreTag,
        PROPERTY.N.value('.', 'nvarchar(100)') AS ValorTag
    FROM
    (SELECT CAST(@test AS XML) Prop) XML
    OUTER APPLY XML.Prop.nodes('/properties/*') AS PROPERTY(N);
    

    En esta consulta, la función local-name() se utiliza para extraer dinámicamente el nombre de la etiqueta para cada propiedad, mientras que la función value() se utiliza para extraer el valor de la etiqueta.

    El resultado de esta consulta para el XML dado será:

    NombreTag       ValorTag
    --------------- ---------------------
    property        Blah
    property        Blah2
    property        Blah3
    property        80000011b
    property        TheEnd
    property        TestName
    property        Id
    structure       
    property        Name
    

    Ten en cuenta que para la propiedad MoreDIfficult, que contiene una estructura anidada, el nombre de la etiqueta sigue siendo extraído de forma dinámica como property. Si necesitas extraer el nombre de la etiqueta de la estructura anidada, puedes modificar la expresión xpath en la función nodes() en consecuencia.

Comments are closed.