Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

แยกวิเคราะห์ XML ใน PL/SQL

บล็อกนี้สำรวจวิธีการสองสามวิธีในการจัดการข้อมูล XML ใน Oracle® PL/SQL เรียนรู้เพิ่มเติมเกี่ยวกับบริการฐานข้อมูลของเรา

หากคุณต้องการแปลงข้อมูล XML จากไฟล์ XML เป็นแถวและคอลัมน์ของ Oracle PL/SQL มีตัวเลือกดังต่อไปนี้:

  • โหลดไฟล์ XML ลงในตาราง XML แล้วแยกวิเคราะห์
  • แยกวิเคราะห์ไฟล์ XML โดยตรงโดยไม่ต้องโหลดลงในตาราง XML

ในการโหลดข้อมูล XML ลงในตาราง Oracle ให้ใช้ตัวเลือก เช่น SQLLOADER ,utl_file , หรือ XML CLOB . หลังจากที่คุณโหลดข้อมูลลงในตารางแล้ว คุณต้องแยกค่าออกจากแท็ก XML แต่ละรายการ ในการดึงข้อมูล XML ให้ใช้ฟังก์ชันในตัวของ Oracle เช่น XMLELEMENT , XMLAGG , XMLTABLE ,XMLSEQUENCE และ EXTRACTVALUE .

ฟังก์ชันในตัวหลักที่ใช้คือ EXTRACT ซึ่งแสดงในภาพต่อไปนี้:

แยกวิเคราะห์ XML ใน PL/SQL

ที่มาของภาพ :https://docs.oracle.com/cd/B19306_01/server.102/b14200/img/extract_xml.gif

ไฟล์ตัวอย่าง

หากต้องการสำรวจตัวเลือกเหล่านี้โดยละเอียด ตัวอย่างในโพสต์นี้ใช้ไฟล์ Test.xml . ในการเข้าถึงไฟล์ในฐานข้อมูล ให้ใช้ DBA ไดเร็กทอรีซึ่งกำหนดไว้ใน Oracle ตัวอย่างใช้ XX_UTL_DIR เป็นไดเรกทอรีอ้างอิง คุณสามารถใช้ไดเร็กทอรีที่คุณเลือกแทนได้

Test.xml มีเนื้อหาดังต่อไปนี้:

<?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>

วิธีแรก:โหลดไฟล์ XML ลงในตาราง XML แล้วแยกวิเคราะห์

ขั้นแรก สร้างตารางใน Oracle ที่มีคอลัมน์ที่มีประเภทข้อมูล XMLTYPE .

ตัวอย่างเช่น ใช้รหัสต่อไปนี้เพื่อสร้างตาราง:

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

ถัดไป แทรกข้อมูลจาก Test.xml ลงใน xml.tab โดยใช้คำสั่งต่อไปนี้:.

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

คำสั่ง INSERT ก่อนหน้าจะแทรกข้อมูลของไฟล์ Test.xml ลงในช่อง xml_data ของตาราง xml_tab . หลังจาก INSERT เสร็จสิ้น XMLdata จะพร้อมใช้งานในตาราง xml_tab . หากต้องการอ่านข้อมูลในแบบสอบถาม SELECT ให้ใช้คำสั่ง SELECT ที่อธิบายไว้ถัดไป

วิธีอ่านข้อความแท็ก Message ที่อยู่ภายใต้แท็กหลักDataError , ใช้คำสั่ง SQL ต่อไปนี้:

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';

วิธีอ่าน property name และค่าของมัน ให้ใช้คำสั่ง SQL ต่อไปนี้:

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';

วิธีที่สอง:แยกวิเคราะห์ไฟล์ XML โดยตรงโดยไม่ต้องโหลดลงในตาราง XML

หากคุณต้องการแยกวิเคราะห์ Test.xml . โดยตรง โดยไม่ต้องโหลดลงใน Oracletable คุณอาจใช้คำสั่ง SELECT ต่อไปนี้:

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

สรุป

ทั้งสองวิธีในการแยกวิเคราะห์ข้อมูล XML ที่อธิบายไว้ในโพสต์นี้ให้ผลลัพธ์สุดท้ายที่เหมือนกัน วิธีแรกคือกระบวนการสามขั้นตอน ซึ่งต้องใช้โค้ดต่อไปนี้:

  1. สร้างตาราง Oracle
  2. แทรกข้อมูลของไฟล์ XML ลงในตารางที่สร้างขึ้น
  3. เขียนคำสั่ง SELECT เพื่อดึงค่าจากตาราง

ตัวเลือกที่สองเป็นกระบวนการขั้นตอนเดียวที่คุณเขียนคำสั่ง SELECT และรับผลลัพธ์ที่ต้องการ

บทสรุป

ทั้งสองตัวเลือกใช้งานได้ แต่ถ้าคุณต้องการจัดเก็บไฟล์ XML ในการอ้างอิง Oracle forfuture คุณควรใช้แนวทางแรกเนื่องจากข้อมูลยังคงอยู่ในตารางสำหรับการอ้างอิงในอนาคต และคุณสามารถเข้าถึงได้ทุกเมื่อ

โดยการเลือกวิธีที่สอง คุณสามารถแยกวิเคราะห์ข้อมูลได้โดยตรง อย่างไรก็ตาม ด้วยตัวเลือกนี้ ข้อมูลไฟล์ XML ดั้งเดิมไม่สามารถเข้าถึงได้ในอนาคต เนื่องจากตัวเลือกนี้จะไม่เก็บเนื้อหาของไฟล์ XML ใน Oracle

ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม

เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการดูแลระบบ การจัดการ และการกำหนดค่าจากผู้เชี่ยวชาญ

บริการแอปพลิเคชันของ Rackspace(RAS) ผู้เชี่ยวชาญจะให้บริการแบบมืออาชีพและที่มีการจัดการในแอปพลิเคชันที่หลากหลาย:

  • แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
  • การวางแผนทรัพยากรองค์กร (ERP)
  • ระบบธุรกิจอัจฉริยะ
  • การจัดการลูกค้าสัมพันธ์ของ Salesforce (CRM)
  • ฐานข้อมูล
  • อีเมลโฮสติ้งและประสิทธิภาพการทำงาน

เราจัดส่ง:

  • ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
  • ประสบการณ์ที่คลั่งไคล้™ :เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
  • ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
  • ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ

แชทเลยเพื่อเริ่มต้น