sql >> Databáze >  >> RDS >> Oracle

Analyzujte HTML tabulku pomocí Oracle

Vaše path hledá td pod tr; ale jsou dvě, a proto se vám zobrazuje chyba „získala sekvenci více položek“. Můžete odkazovat na každý td tag podle jeho pozice, jako td[1] atd. Velmi závisí na tom, že struktura tabulky je podle očekávání.

S tímto konkrétním příkladem můžete:

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

což dostane:

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

Prolomit to však nebude vyžadovat mnoho variací v HTML. Zobrazit tuto odpověď z určitých důvodů je křehký a proč se obecně považovalo za nerozumné pokoušet se analyzovat HTML jako XML.




  1. Porovnejte obrázek BLOB s obrázky uloženými jako ORDImage pomocí SQL/MM Still Image

  2. Jak získat seznam pohledů MySQL?

  3. Příkaz INSERT je v konfliktu s omezením FOREIGN KEY - SQL Server

  4. Dynamický přístup k tabulce PostgreSQL