none
XML a tabla temporal RRS feed

  • Pregunta

  • Hola a todos,

        tengo un xml un tanto complejo (y en holandés) que necesito leer y llenar una tabla temporal pero no encuentro la forma de hacerlo. El XML pueden descargarlo de aquí: XML Ejemplo.

       Necesito leer los campos GebiedType, GebiedNaam, por ejemplo, cuyo path es: /NORA/Spoortakken/Spoortak/SpoortakBegin/SpoortakBegrenzerId

       El XML lo inserto en una tabla temporal, en un campo XML de esta manera:

    DROP TABLE IF EXISTS #TempXML
    CREATE TABLE #TempXML
    (
    Id INT IDENTITY PRIMARY KEY,
    XMLData XML,
    LoadedDateTime DATETIME
    )

    INSERT INTO #TempXML ( XMLData ,
                           LoadedDateTime )
    SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
    FROM OPENROWSET(BULK 'C:\NORA_Amersfoort_Wagenwerkplaats_v002.xml',SINGLE_BLOB) AS X

       E intento leerlo así:

    DECLARE @MyXML XML
    DECLARE @hDoc INT

    EXEC sys.sp_xml_preparedocument @hDoc OUTPUT, @MyXML

    SELECT *
    FROM OPENXML(@hDoc, '/NORA/Spoortakken/Spoortak/SpoortakBegin/SpoortakBegrenzerId')
    WITH
    (
    GebiedType [varchar](50) 'GebiedType',
    GebiedNaam [varchar](100) 'GebiedNaam',
    ObjectType [varchar](100) 'ObjectType',
    ObjectNaam [VARCHAR](50) 'ObjectNaam'
    )

        Solo que no obtengo ninguna fila.

        Alguien podría indicarme la forma correcta de hacerlo?

        Muchas gracias.


    Mauricio - Copenhague - Dinamarca

    viernes, 25 de enero de 2019 11:30

Respuestas

  • El problema, la razon por la que no te encuentra ninguna fila, es que el XML en cuestion tiene declarado un espacio de nombres (el "xmnls=..." que hay al principio). Para poder trabajar con el espacio de nombres hay que declararlo en el sp_xml_preparedocument, de lo contrario cree que tu XPATH esta en un espacio de nombres distinto y no encuentra ninguna coincidencia.

    No recuerdo de memoria la sintaxis exacta para declararlo, pero es bastante facil de encontrar si haces una busqueda usando por ejemplo las palabras clave "sp_xml_preparedocument xmlns".

    • Marcado como respuesta TDCSoftware viernes, 25 de enero de 2019 13:53
    viernes, 25 de enero de 2019 12:08

Todas las respuestas

  • El problema, la razon por la que no te encuentra ninguna fila, es que el XML en cuestion tiene declarado un espacio de nombres (el "xmnls=..." que hay al principio). Para poder trabajar con el espacio de nombres hay que declararlo en el sp_xml_preparedocument, de lo contrario cree que tu XPATH esta en un espacio de nombres distinto y no encuentra ninguna coincidencia.

    No recuerdo de memoria la sintaxis exacta para declararlo, pero es bastante facil de encontrar si haces una busqueda usando por ejemplo las palabras clave "sp_xml_preparedocument xmlns".

    • Marcado como respuesta TDCSoftware viernes, 25 de enero de 2019 13:53
    viernes, 25 de enero de 2019 12:08
  • Perfecto, Alberto, era eso. Le removí esas líneas y ahora puedo leer los datos.

    Muchas gracias!


    Mauricio - Copenhague - Dinamarca

    viernes, 25 de enero de 2019 13:53