sql >> Database >  >> RDS >> Oracle

XML ontleden met onbekende naamruimten in Oracle SQL

Ik weet dat dit behoorlijk oud is, maar ik zag het vandaag en herinnerde me de pijn die ik ervoer bij het omgaan met namespaced XML. Mijn oplossing was om de naamruimten te verwijderen met een XSLT-transformatie en deze te verwerken als gewone oude XML. De functie die ik hiervoor gebruikte is:

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. Alternatief voor het gebruik van het trefwoord LIMIT in een SubQuery in MYSQL

  2. Pagineer records op Client side issue

  3. Ik wil dat mysql-tabel twee talen ondersteunt

  4. PostgreSQL:vind zinnen die het dichtst bij een bepaalde zin liggen