Oracle PLSQL: xmltype.transform vs xmltransform

Desde que hemos movido la base de datos de 11.2.0.2.0 a 11.2.0.4.0xmltype.transform La función tenía un comportamiento específico.

El problema es que antes no funcionaba bien: reemplazó todas las etiquetas con la versión de apertura y cierre (por ejemplo, reemplazó<br /> con<br></br>), pero podría vivir con eso. Ahora se comporta al revés (reemplaza todo con una etiqueta) y genera un gran problema con<script></script> etiqueta, porque esta etiquetadebe cerrarse explícitamente con un</script> de lo contrario, el navegador piensa que no está cerrado, incluso si está cerrado<script /> => todas las páginas web están corruptas ahora.

Ejemplo:

declare
  xml      xmltype := new xmltype('<?xml version="1.0" encoding="ISO-8859-1"?><document></document>');
  xsl      xmltype := new xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                                   <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                                     <xsl:output method="html" />
                                     <xsl:template match="/">
                                       <html>
                                         <head>
                                           <script type="text/javascript" src="jquery-1.11.1.min.js"></script>
                                         </head>
                                         <body>
                                           <br />
                                         </body>
                                       </html>
                                     </xsl:template>
                                   </xsl:stylesheet>');
begin
  dbms_output.put_line(xml.transform(xsl,null).getclobval());
end;

En 11.2.0.2.0 esto funciona así:

<html><head><script src="jquery-1.11.1.min.js"></script></head><body><br></br></body></html>

En 11.2.0.4.0 funciona diferente:

<html>
  <head>
    <script type="text/javascript" src="jquery-1.11.1.min.js"/>
  </head>
  <body>
    <br/>
  </body>
</html>

Supongo que el problema está en el formateo, pero no configuré nada más para habilitarlo ...

Lo que es interesante, he encontradoEste artículo con otro problema, pero con la misma solución como solución:

select xmltransform(xmltype('<?xml version="1.0" encoding="ISO-8859-1"?><document></document>'),
                    xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                             <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                               <xsl:output method="html" />
                               <xsl:template match="/">
                                 <html>
                                   <head>
                                     <script src="jquery-1.11.1.min.js"></script>
                                   </head>
                                   <body>
                                     <br />
                                   </body>
                                 </html>
                               </xsl:template>
                             </xsl:stylesheet>')) html
from dual

esto simplemente funciona en todas las versiones y da un resultado adecuado (el que tiene duplicado<br />, pero como ya he dicho, no me importa).

En la documentación de Oracle no se dice nada sobre la diferencia en estas funciones; incluso dicen muchas veces que son las mismas funciones (mira aquí)

Por supuesto, usaré esta solución, pero, por favor, dígame: ¿es posible hacer que funcione nuevamente sin cambiar el código?

¿Cuál es la razón de este comportamiento?

Gracias de antemano.

Respuestas a la pregunta(0)

Su respuesta a la pregunta