sql >> データベース >  >> RDS >> Oracle

OracleSQLで名前空間が不明なXMLを解析する

    これはかなり古いことは知っていますが、今日それを見つけて、名前空間付きXMLを処理しようとしたときに経験した苦痛を思い出しました。私の解決策は、XSLT変換を使用して名前空間を取り除き、それを単純な古いXMLとして処理することでした。これを行うために使用した関数は次のとおりです。

    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. 動的SQLを使用したテーブル構造の取得

    2. MySQLでスペースを含む列名を選択する方法

    3. PerlのDBIとOracleでマルチスレッドを使用できますか?

    4. 送信前にOracleSQLクエリテキストを変更する