sql >> Database >  >> RDS >> Oracle

HTML-tabel ontleden met Oracle

Uw path is op zoek naar een td onder de tr; maar er zijn er twee, vandaar de fout 'kreeg meerdere items' die u ziet. U kunt naar elke td . verwijzen tag op zijn positie, als td[1] enz. Het is echter erg afhankelijk van het feit dat de tafelstructuur is zoals verwacht.

Met dit specifieke voorbeeld kunt u het volgende doen:

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

die krijgt:

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

Er is echter niet veel variatie in de HTML nodig om het te doorbreken. Bekijk dit antwoord om de een of andere reden is het kwetsbaar en wordt het over het algemeen als onverstandig beschouwd om te proberen HTML te ontleden als XML.




  1. MySQL ATAN() Functie - Retourneer de boogtangens van een waarde (of waarden)

  2. Een object verwijderen uit een verzameling in SQLAlchemy

  3. MySQL-externe sleutels op zichzelf

  4. is er een manier om alle gereserveerde woorden in mysql op te sommen met behulp van het mysql-opdrachtregelprogramma?