Oracle
 sql >> база данни >  >> RDS >> Oracle

Анализирайте HTML таблица с Oracle

Вашият path търси td под tr; но има две, оттук и грешката „получих последователност от няколко елемента“, която виждате. Можете да посочите всеки td таг по неговата позиция, като td[1] и т.н. Въпреки това много зависи от структурата на таблицата, която се очаква.

С този конкретен пример можете да направите:

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

което получава:

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

Все пак няма да са необходими много вариации в HTML, за да го разбиете. Вижте този отговор поради някои причини той е крехък и защо обикновено се смята за неразумно да се опитваме да анализираме HTML като 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. Избягване на ORA-00955:името вече се използва от съществуващ обект

  2. Oracle, Направете датата и часа първия ден от месеца

  3. Попълнете редове в колона A със стойността на колона B, ако условието в колона A е изпълнено

  4. Как да изтриете виртуална машина от VirtualBox

  5. Одит в Oracle