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 ничего не сказано о разнице в этих функциях; они даже много раз говорят, что это одни и те же функции (посмотреть здесь).
Я, конечно, буду использовать этот обходной путь, но, пожалуйста, скажите мне: возможно ли заставить его работать снова без изменения кода?
В чем причина такого поведения?
Заранее спасибо.