sql >> Database teknologi >  >> RDS >> Oracle

Parse HTML-tabel med Oracle

Din path leder efter en td under tr; men der er to, derfor fejlen "har flere elementers sekvens" du ser. Du kan henvise til hver td tag efter sin position som td[1] osv. Det er dog meget afhængigt af, at tabelstrukturen er som forventet.

Med dette specifikke eksempel kan du gøre:

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

som får:

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

Det kræver dog ikke meget variation i HTML'en for at bryde den. Se dette svar af nogle grunde er det skrøbeligt, og hvorfor det generelt anses for uklogt at forsøge at parse HTML som XML.




  1. Der er ikke valgt noget skema at oprette i ... fejl

  2. 4 måder at indsætte flere rækker på i Oracle

  3. Fjern eller trim første eller sidste par tegn i MySQL-databasen med SQL

  4. Sådan bestiller du efter månedsnavn i MySQL