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

Parsing tabel HTML dengan Oracle

path Your Anda sedang mencari td di bawah tr; tetapi ada dua, karenanya kesalahan "dapatkan urutan multi-item" yang Anda lihat. Anda dapat mereferensikan setiap td beri tag berdasarkan posisinya, sebagai td[1] dll. Ini sangat bergantung pada struktur tabel seperti yang diharapkan.

Dengan contoh khusus ini, Anda dapat melakukan:

with tbl as
(
    select xmltype('
        <table>
          <tbody>
            <tr class="blue"><td>code</td><td>rate</td></tr>
            <tr class="gray_1"><td><span>USD</span><em>1</em></td><td>476.16</td></tr>
            <tr class="gray_2"><td><span>AUD</span><em>1</em></td><td>327.65</td></tr>
            <tr class="gray_9"><td><span>IRR</span><em>100</em></td><td>1.13</td></tr>
            <tr class="blue"><td>some comment</td><td>some comment</td></tr>
            <tr class="gray_1"><td><span>EUR</span><em>1</em></td><td>526.54</td></tr>
          </tbody>
        </table>
    ') xml_data from dual
)
select
    x.class, x.currency, x.amount, to_number(x.rate) as rate
from
    tbl
cross join
    xmltable('/table/tbody/tr'
        passing tbl.xml_data
        columns
            class varchar2(10) path '@class',
            currency varchar2(3) path 'td[1]/span',
            amount number path 'td[1]/em',
            rate varchar2(50) path 'td[2]'
    ) x
where
    x.currency is not null

yang mendapatkan:

CLASS      CUR     AMOUNT       RATE
---------- --- ---------- ----------
gray_1     USD          1     476.16
gray_2     AUD          1     327.65
gray_9     IRR        100       1.13
gray_1     EUR          1     526.54

Tidak perlu banyak variasi dalam HTML untuk memecahkannya. Lihat jawaban ini untuk beberapa alasan ini rapuh, dan mengapa secara umum dianggap tidak bijaksana untuk mencoba mengurai HTML sebagai XML.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah perlu membuang DbCommand setelah digunakan?

  2. SQL:mendapatkan nilai maksimal dari satu kolom dan kolom lain yang sesuai

  3. Sisipkan baris (induk dan anak) secara terprogram

  4. Bagaimana cara meningkatkan ukuran buffer di Oracle SQL Developer untuk melihat semua catatan?

  5. Oracle SQL:Query SQL menghasilkan 4 kali hasil dan data tidak dapat dipesan dengan benar