Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przeanalizuj tabelę HTML za pomocą Oracle

Twoja path szuka td pod tr; ale są dwa, stąd błąd „uzyskano sekwencję wieloelementową”, który widzisz. Możesz odwołać się do każdego td tag według swojej pozycji, jak td[1] itp. Jest to jednak bardzo zależne od tego, czy struktura tabeli jest zgodna z oczekiwaniami.

Z tym konkretnym przykładem możesz zrobić:

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

który otrzymuje:

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

Jednak złamanie tego nie wymaga wiele zmian w kodzie HTML. Zobacz odpowiedź z pewnych powodów jest delikatna i dlatego ogólnie uważano, że próba parsowania HTML jako XML jest nierozsądna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. procedura składowana wywołania Oracle w programie select

  2. Co to jest typ danych Oracle MLSLABEL?

  3. Zapytanie o kilka NEXTVAL z sekwencji w jednej instrukcji

  4. Globalne tabele temp — SQL Server vs Oracle

  5. Co oznacza dwukropek :robi w zapytaniu SQL?