Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Parsing XML dengan ruang nama yang tidak dikenal di Oracle SQL

Saya tahu ini cukup lama, tetapi saya melihatnya hari ini dan mengingat rasa sakit yang saya alami saat mencoba menangani XML namespace. Solusi saya adalah menghapus ruang nama dengan transformasi XSLT dan memprosesnya sebagai XML lama biasa. Fungsi yang biasa saya lakukan adalah:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menerapkan ID tanpa celah dan ramah pengguna di NHibernate?

  2. buat sinonim ora-01031 hak istimewa yang tidak mencukupi

  3. Kueri dinamis dengan HibernateCritera API &Oracle - kinerja

  4. Bagaimana cara mengetahui kapan tabel tertentu dibuat di Oracle?

  5. luapan numerik dengan kolom NULL (0,3)