Oracle PLSQL: xmltype.transform против xmltransform

Поскольку мы переместили базу данных с 11.2.0.2.0 на 11.2.0.4.0xmltype.transform Функция получила определенное поведение.

Проблема в том, что раньше он не работал нормально: он заменил все теги на версию с открытым / закрытым<br /> с<br></br>), но я мог бы жить с этим. Теперь он ведет себя наоборот (заменяет все одним тегом) и создает большую проблему с<script></script> тег, потому что этот тегдолжен быть явно закрытым с</script> в противном случае браузер считает, что он не закрыт, даже если он закрыт<script /> => Все веб-страницы сейчас повреждены.

Пример:

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;

В 11.2.0.2.0 это работает так:

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

В 11.2.0.4.0 это работает по-другому:

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

Я думаю, проблема в форматировании, но я не настроил ничего другого, чтобы включить его ...

Что интересно я нашелЭта статья с другой проблемой, но с тем же обходным путем, что и решение:

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

это просто работает в каждой версии и дает правильный результат (тот, с удвоенным<br />, но, как я уже сказал, это не имеет значения для меня).

В документации Oracle ничего не сказано о разнице в этих функциях; они даже много раз говорят, что это одни и те же функции (посмотреть здесь).

Я, конечно, буду использовать этот обходной путь, но, пожалуйста, скажите мне: возможно ли заставить его работать снова без изменения кода?

В чем причина такого поведения?

Заранее спасибо.

Ответы на вопрос(0)

Ваш ответ на вопрос