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.

“→” en una cadena de caracteres está causando el error “Carácter XML no válido 001A encontrado en una expresión SQL/XML” (DB2)

Necesito combinar múltiples filas de mi base de datos y, para hacerlo, necesito eliminar algunos caracteres específicos. Utilizo el siguiente código:

REPLACE(
    (CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
          CONCAT(RTNTXT.LIN_TX,'')
                                 )
                         ) AS CLOB(10024)
                  ) AS VARCHAR(402)
         )
    ),'''',''
    )  AS NARRATIVE

Una vez que en cualquiera de los registros de <mystring> tengo el símbolo →, mi consulta muestra una advertencia sobre el carácter XML ilegal 001A.

Intenté seguir algunos consejos de Google y transformar el código a:

REPLACE(
    (CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
          CONCAT(RTNTXT.LIN_TX,'')
                                 )
                         ) AS CLOB(10024)
                  ) AS VARCHAR(402)
         )
    ),x'1A',''
    )  AS NARRATIVE

pero el error persiste.

¿Puedes decirme qué puedo modificar en la sintaxis para que funcione correctamente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás tratando de reemplazar un carácter específico en los datos XML usando la función REPLACE. El código original reemplaza el carácter &#x0d; con una cadena vacía. Sin embargo, cuando tienes el signo → en tus datos, muestra una advertencia sobre el carácter XML ilegal 001A.

    En el código actualizado, estás tratando de reemplazar el valor hexadecimal x’1A’ con una cadena vacía para evitar la advertencia. Sin embargo, parece que esto no funciona.

    Una posible solución es reemplazar el carácter específico con una referencia de entidad XML válida. Por ejemplo, puedes reemplazar el signo → con , que es la referencia de entidad para una flecha hacia la derecha. Puedes hacer esto usando la función REPLACE antes de la agregación XML:

    REPLACE(RTNTXT.LIN_TX, '→', '→')
    

    Esto reemplazará cada aparición de → con la referencia de entidad →.

    El código actualizado se verá así:

    REPLACE(
      CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
        CONCAT(REPLACE(RTNTXT.LIN_TX, '→', '→'), '') -- Reemplazar el carácter específico con una referencia de entidad XML válida
        )) AS CLOB(10024))) AS VARCHAR(402)
      ), '
    ', '' -- Reemplazar cualquier carácter XML ilegal restante
    ) AS NARRATIVE
    

    Esto debería ayudarte a evitar la advertencia sobre caracteres XML ilegales y te permitirá fusionar varias filas de tu base de datos.

Comments are closed.