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.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage