Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Phân tích cú pháp XML trong PL / SQL

Blog này khám phá một số phương pháp để xử lý dữ liệu XML trong Oracle® PL / SQL. Tìm hiểu thêm về các dịch vụ cơ sở dữ liệu của chúng tôi.

Nếu bạn muốn chuyển đổi dữ liệu XML từ tệp XML thành các hàng và cột Oracle PL / SQL, các tùy chọn sau có sẵn:

  • Tải tệp XML vào bảng XML và sau đó phân tích cú pháp.
  • Phân tích cú pháp trực tiếp tệp XML mà không cần tải vào bảng XML.

Để tải dữ liệu XML vào bảng Oracle, hãy sử dụng các tùy chọn như SQLLOADER , utl_file hoặc XML CLOB . Sau khi tải dữ liệu vào bảng, bạn cần các giá trị toextract từ mỗi thẻ XML. Để trích xuất dữ liệu XML, hãy sử dụng các hàm dựng sẵn do Oracle cung cấp, chẳng hạn như XMLELEMENT , XMLAGG , XMLTABLE , XMLSEQUENCEEXTRACTVALUE .

Chức năng tích hợp chính được sử dụng là EXTRACT , được hiển thị trong hình ảnh sau:

Phân tích cú pháp XML trong PL / SQL

Nguồn hình ảnh :https://docs.oracle.com/cd/B19306_01/server.102/b14200/img/extract_xml.gif

Tệp mẫu

Để khám phá chi tiết các tùy chọn này, ví dụ trong bài đăng này sử dụng tệp, Test.xml . Để truy cập tệp trong cơ sở dữ liệu, hãy sử dụng DBA thư mục, được định nghĩa trong Oracle. Các ví dụ sử dụng XX_UTL_DIR dưới dạng thư mục được tham chiếu. Thay vào đó, bạn có thể sử dụng thư mục bạn chọn.

Test.xml có các nội dung sau:

<?xml version = '1.0' encoding = 'UTF-8'?>
<UANotification xmlns="https://www.test.com/UANotification">
    <NotificationHeader>
    <Property name="ErrorMessage" value="User Data Invalid"/>
            <Property name="SPSDocumentKey" value="11111111111"/>
            <Property name="AppKey" value="22222222"/>
            <Property name="FileName" value="SH201701181418.61W"/>
            <Property name="SenderName" value="Test"/>
            <Property name="ReceiverName" value="Integrated Supply Network"/>
            <Property name="DocumentType" value="856"/>
            <Property name="SourceDataType" value="XML"/>
            <Property name="DestinationDataType" value="FEDS"/>
            <Property name="XtencilNet" value="shFedsWrite"/>
            <Property name="PreviousMaps" value="shFedsWrite]"/>
    </NotificationHeader>
    <FINotification xmlns="https://www.test.com/fileIntegration">
            <ServiceResult>
                    <DataError>
                            <Message>Invalid data test 1</Message>
                    </DataError>
                    <DataError>
                            <Message>Invalid data test 2</Message>
                    </DataError>
            </ServiceResult>
    </FINotification>
</UANotification>

Cách tiếp cận đầu tiên:Tải tệp XML vào một bảng XML và sau đó phân tích cú pháp nó

Đầu tiên, tạo một bảng trong Oracle bao gồm một cột có kiểu dữ liệu XMLTYPE .

Ví dụ:sử dụng mã sau để tạo bảng:

CREATE TABLE xml_tab (
  File_name  varchar2(100),
  xml_data  XMLTYPE
);

Tiếp theo, chèn dữ liệu từ Test.xml vào xml.tab bằng cách sử dụng lệnh sau:.

INSERT INTO xml_tab
VALUES ( ‘Test.xml’,
XMLTYPE (BFILENAME ('XX_UTL_DIR', ‘Test.xml’),
NLS_CHARSET_ID ('AL32UTF8')
));

Câu lệnh INSERT trước sẽ chèn dữ liệu của tệp Test.xml vào trường xml_data của bảng xml_tab . Sau khi INSERT hoàn tất, dữ liệu XML có sẵn trong bảng xml_tab . Để đọc dữ liệu trong một truy vấn SELECT, hãy sử dụng các câu lệnh SELECT được mô tả tiếp theo.

Để đọc văn bản của thẻ Message có sẵn trong thẻ mẹ DataError , sử dụng lệnh SQL sau:

SELECT EXTRACT (VALUE (a1),
            '/DataError/Message/text()',
            'xmlns="https://www.test.com/fileIntegration')
      msg
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/ns2:FINotification/ns2:ServiceResult/ns2:DataError',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
WHERE file_name = 'Test.xml';

Để đọc property name và giá trị của nó, hãy sử dụng lệnh SQL sau:

SELECT EXTRACTVALUE (VALUE (a1),
                 '/Property/@name',
                 'xmlns="https://www.test.com/UANotification')
      attribute,
   EXTRACTVALUE (VALUE (a1),
                 '/Property/@value',
                 'xmlns="https://www.test.com/UANotification')
      VALUE
 FROM xml_tab,
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xml_data,
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
 WHERE file_name = 'Test.xml';

Cách tiếp cận thứ hai:Phân tích cú pháp trực tiếp tệp XML mà không cần tải nó vào bảng XML

Nếu bạn muốn phân tích cú pháp trực tiếp Test.xml mà không cần tải nó vào Oracletable, thì bạn có thể sử dụng câu lệnh SELECT sau:

SELECT EXTRACTvalue (VALUE (a1),
            '/Property/@name',
            'xmlns="https://www.test.com/UANotification') attribute,
             EXTRACTvalue (VALUE (a1),
            '/Property/@value',
            'xmlns="https://www.test.com/UANotification') value
 FROM
   TABLE (
      XMLSEQUENCE (
         EXTRACT (
            xmltype(BFILENAME ('XX_UTL_DIR', 'Test.xml'),NLS_CHARSET_ID ('AL32UTF8')),
            '/UANotification/NotificationHeader/Property',
            'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1

Kết thúc

Cả hai phương pháp phân tích cú pháp dữ liệu XML được mô tả trong bài đăng này đều cung cấp cho bạn thông lượng tài chính như nhau. Cách tiếp cận đầu tiên là quy trình ba bước, quy trình này yêu cầu các đoạn mã sau:

  1. Tạo bảng Oracle.
  2. Chèn dữ liệu của tệp XML vào bảng đã tạo.
  3. Viết câu lệnh SELECT để trích xuất các giá trị từ bảng.

Tùy chọn thứ hai là quy trình một bước trong đó bạn viết câu lệnh SELECT và nhận được kết quả mong muốn.

Kết luận

Cả hai tùy chọn đều hoạt động, nhưng nếu bạn cần lưu trữ tệp XML trong tham chiếu Oracle forfuture, thì bạn nên sử dụng cách tiếp cận đầu tiên vì dữ liệu vẫn tồn tại trong bảng để tham khảo trong tương lai và bạn có thể truy cập nó bất kỳ lúc nào.

Bằng cách chọn cách tiếp cận thứ hai, bạn có thể phân tích cú pháp trực tiếp dữ liệu. Tuy nhiên, với tùy chọn này, dữ liệu tệp XML gốc không thể được truy cập trong tương lai vì tùy chọn này không bao giờ lưu trữ nội dung của tệp XML trong Oracle.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

Tối ưu hóa môi trường của bạn với quản trị, quản lý và cấu hình chuyên gia

Dịch vụ ứng dụng của Rackspace (RAS) các chuyên gia cung cấp các dịch vụ chuyên nghiệp và được quản lý sau trên nhiều danh mục ứng dụng:

  • nền tảng Thương mại điện tử và Trải nghiệm Kỹ thuật số
  • Hoạch định Nguồn lực Doanh nghiệp (ERP)
  • Kinh doanh Thông minh
  • Quản lý quan hệ khách hàng của Salesforce (CRM)
  • Cơ sở dữ liệu
  • Lưu trữ Email và Năng suất

Chúng tôi cung cấp:

  • Chuyên môn không thiên vị :Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị tức thì.
  • Trải nghiệm cuồng tín ™ :Chúng tôi kết hợp một Quy trình trước. Công nghệ thứ hai. Tiếp cận với hỗ trợ kỹ thuật chuyên dụng để cung cấp các giải pháp toàn diện.
  • Danh mục đầu tư vô song :Chúng tôi áp dụng nhiều kinh nghiệm về đám mây để giúp bạn lựa chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
  • Phân phối nhanh :Chúng tôi đáp ứng bạn ở nơi bạn đang ở trong hành trình và thành công vượt bậc với bạn.

Trò chuyện ngay bây giờ để bắt đầu.