Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Phân tích cú pháp XML với không gian tên không xác định trong Oracle SQL

Tôi biết điều này khá cũ, nhưng tôi đã phát hiện ra nó hôm nay và nhớ lại nỗi đau mà tôi đã trải qua khi cố gắng xử lý XML không gian tên. Giải pháp của tôi là loại bỏ các không gian tên bằng một biến đổi XSLT và xử lý nó dưới dạng XML cũ thuần túy. Chức năng tôi đã sử dụng để làm điều này là:

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. Tôi có thể thay đổi thuộc tính AutoCommit của kết nối JDBC nhiều lần không

  2. Câu lệnh SQL để nối và đưa ra kết quả trong nhiều cột

  3. Bỏ bảng trong Oracle SQL

  4. Sử dụng một câu lệnh trường hợp trong một ràng buộc kiểm tra

  5. Oracle RESET_PACKAGE không đặt lại giá trị của một biến trong phiên