Oracle PLSQL: xmltype.transform vs xmltransform
Seitdem haben wir die Datenbank von 11.2.0.2.0 auf 11.2.0.4.0 verschobenxmltype.transform
Funktion hatte ein bestimmtes Verhalten.
Das Problem ist, dass, bevor es nicht richtig funktionierte, alle Tags durch die Open-Close-Version ersetzt wurden (z. B. durch Ersetzen)<br />
mit<br></br>
), aber ich könnte damit leben. Jetzt verhält es sich umgekehrt (ersetzt alles mit einem Tag) und es macht ein großes Problem mit<script></script>
tag, weil dieser tagMuss explizit mit einem abgeschlossen werden</script>
Andernfalls denkt der Browser, dass es nicht geschlossen ist, auch wenn es so geschlossen ist<script />
=> alle Webseiten sind jetzt beschädigt.
Beispiel:
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;
In 11.2.0.2.0 funktioniert das so:
<html><head><script src="jquery-1.11.1.min.js"></script></head><body><br></br></body></html>
In 11.2.0.4.0 funktioniert es anders:
<html>
<head>
<script type="text/javascript" src="jquery-1.11.1.min.js"/>
</head>
<body>
<br/>
</body>
</html>
Ich denke, das Problem liegt in der Formatierung, aber ich habe nichts anderes eingerichtet, um es zu aktivieren ...
Was interessant ist, habe ich gefundenDieser Beitrag mit einem anderen Problem, aber mit der gleichen Problemumgehung als Lösung:
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
Dies funktioniert nur in jeder Version und liefert ein korrektes Ergebnis (das mit dem Doppelten)<br />
, aber wie gesagt, es ist mir egal).
In der Oracle-Dokumentation wird nichts über den Unterschied zwischen diesen Funktionen gesagt. Sie sagen sogar oft, dass sie die gleichen Funktionen haben (siehe hier).
Ich werde diese Problemumgehung natürlich verwenden, aber bitte sagen Sie mir: Ist es möglich, sie wieder zum Laufen zu bringen, ohne den Code zu ändern?
Was ist der Grund für dieses Verhalten?
Danke im Voraus.