Oracle PLSQL: xmltype.transform vs xmltransform
Desde que movemos o banco de dados de 11.2.0.2.0 para 11.2.0.4.0xmltype.transform
função tinha um comportamento específico.
O problema é que, antes de não funcionar bem: substituía todas as tags pela versão de abertura e fechamento (por exemplo, substituía<br />
com<br></br>
), mas eu poderia viver com isso. Agora ele se comporta de maneira inversa (substitui tudo por uma tag) e cria um grande problema com<script></script>
tag, porque esta tagdevo ser explicitamente fechado com um</script>
caso contrário, o navegador acha que não está fechado, mesmo se estiver fechado,<script />
=> todas as páginas da web estão corrompidas agora.
Exemplo:
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;
No 11.2.0.2.0, funciona assim:
<html><head><script src="jquery-1.11.1.min.js"></script></head><body><br></br></body></html>
No 11.2.0.4.0, ele funciona diferente:
<html>
<head>
<script type="text/javascript" src="jquery-1.11.1.min.js"/>
</head>
<body>
<br/>
</body>
</html>
Acho que o problema está na formatação, mas não configurei mais nada para ativá-lo ...
O que é interessante, eu encontreiEste artigo com outro problema, mas com a mesma solução alternativa que uma solução:
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
isso só funciona em todas as versões e fornece um resultado adequado (aquele com o dobro<br />
, mas como eu disse, isso não importa para mim).
Na documentação do Oracle, nada é dito sobre a diferença nessas funções; eles até dizem muitas vezes que são as mesmas funções (Veja aqui)
Obviamente, usarei esta solução alternativa, mas, por favor, diga-me: é possível fazê-la funcionar novamente sem alterar o código?
Qual é a razão desse comportamento?
Agradeço antecipadamente.