sql >> Databasteknik >  >> RDS >> Oracle

Parsar XML med okända namnområden i Oracle SQL

Jag vet att det här är ganska gammalt, men jag upptäckte det idag och kom ihåg smärtan jag upplevde när jag försökte hantera XML med namnavstånd. Min lösning var att ta bort namnområdena med en XSLT-transform och bearbeta den som vanlig gammal XML. Funktionen jag använde för att göra detta är:

function remove_namespace( i_xml in xmltype )
  return xmltype
is
  v_xml xmltype default i_xml;
  v_xsl varchar2(32767);
begin
  v_xsl := '<?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:template match="*">
          <!-- remove element prefix (if any) -->
          <xsl:element name="{local-name()}">
          <!-- process attributes -->
          <xsl:for-each select="@*">
            <!-- remove attribute prefix (if any) -->
            <!-- this if filters out any xmlns="" atts that have no
                 namespace prefix in the xml -->
            <xsl:if test="(local-name() != ''xmlns'')">
              <xsl:attribute name="{local-name()}">
                <xsl:value-of select="."/>
              </xsl:attribute>
            </xsl:if>
          </xsl:for-each>
         <xsl:apply-templates/>
         </xsl:element>
         </xsl:template>
         </xsl:stylesheet>';
  return v_xml.transform(xmltype(v_xsl));
end;



  1. Värdefel vid import av data till postgres-tabellen med psycopg2

  2. Mysql-fråga för att dynamiskt konvertera rader till kolumner

  3. <expr> förväntat, fick '?'

  4. Själv går med i Mysql... Hur skulle jag själv gå med i det här bordet?