Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Распарсить html  [new]
англикот
Guest
Всем привет,

подскажите в какую сторону копать, у меня есть CLOB
который не конвертится в XML.

из этого CLOB надо достать некоторую инфу.
выглядит он так


<tr>
			<th scope="col">ID</th><th scope="col">ID2</th><th scope="col">ID3</th><th scope="col">NAME</th>

		</tr><tr>
			<td>123</td><td>3124134</td><td>3423</td><td>Name 1.3453 %</td>
		</tr><tr>
			<td>123</td><td>1341324</td><td>342</td><td>Name 1.3453 %</td>
		</tr><tr>
			<td>234</td><td>43231</td><td>2343</td><td>Name 1.3453 %</td>
		</tr><tr>
			<td>8974</td><td>1341334</td><td>23423</td><td>Name, name 1.3453 %</td>
		</tr>

и таких строк много, в общем в файле одна таблица
я так понимаю надо использовать REGEXP_SUBSTR
14 июл 11, 14:03    [10973622]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
или вырезать table сконвертить в XML и потом парсить этот XML
14 июл 11, 14:12    [10973723]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
хочу вырезать table и сохранить как XML, но что то не получается

SELECT
  REGEXP_SUBSTR(response, '<table[.]+</table>')
  from  nr_response
14 июл 11, 14:48    [10974088]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
В итоге получил такую XML

with t as (
 select xmltype(
'<table cellspacing="0" rules="all" border="1" id="gvExportDS" style="border-collapse:collapse;">
        <tr>
            <th scope="col">item1</th><th scope="col">item2</th><th scope="col">item3</th><th scope="col">item4</th>
        </tr><tr>
            <td>4375</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>7414</td><td>817264804</td><td>143</td><td>RevShare</td>
        </tr><tr>
            <td>9443</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>10464</td><td>817426643</td><td>164</td><td>RevShare</td>
        </tr><tr>
            <td>16040</td><td>817429938</td><td>1</td><td>rev</td>
        </tr><tr>
            <td>2304</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>25423</td><td>817426643</td><td>164</td><td>rev</td>
        </tr><tr>
            <td>29445</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>31412</td><td>14045392</td><td>22</td><td>Revenue</td>
        </tr><tr>
            <td>3240</td><td>817246643</td><td>164</td><td>RevShare</td></tr>
</table>') str from dual
) 
select str 
from 
t
14 июл 11, 16:15    [10974890]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
Подскажите как распарсить этот XML
куда копать

в результате хочу плучить 3 колонки

4375 817274966 Revenue
7414 817264804 RevShare
9443 817247966 Revenue
14 июл 11, 16:34    [10975099]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
Получаю ошибку
ORA-19025: EXTRACTVALUE returns value of only one node

with t as (
 select xmltype(
'<table cellspacing="0" rules="all" border="1" id="gvExportDS" style="border-collapse:collapse;">
        <tr>
            <th scope="col">item1</th><th scope="col">item2</th><th scope="col">item3</th><th scope="col">item4</th>
        </tr><tr>
            <td>4375</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>7414</td><td>817264804</td><td>143</td><td>RevShare</td>
        </tr><tr>
            <td>9443</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>10464</td><td>817426643</td><td>164</td><td>RevShare</td>
        </tr><tr>
            <td>16040</td><td>817429938</td><td>1</td><td>rev</td>
        </tr><tr>
            <td>2304</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>25423</td><td>817426643</td><td>164</td><td>rev</td>
        </tr><tr>
            <td>29445</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>31412</td><td>14045392</td><td>22</td><td>Revenue</td>
        </tr><tr>
            <td>3240</td><td>817246643</td><td>164</td><td>RevShare</td></tr>
</table>') a from dual
) 
SELECT extractvalue( VALUE( d ), '/tr/td' ) "id1", 
       extractvalue( VALUE( d ), '/tr/td' ) "id2" 
      FROM t, TABLE( XMLSEQUENCE( EXTRACT( t.a, 'table/tr' ))) d
      
14 июл 11, 17:32    [10975512]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
tik-tak
Member

Откуда: Санкт-Петербург
Сообщений: 62
Возможно, можно воспользоваться следующей методой:

with t as (
 select xmltype(
'<table cellspacing="0" rules="all" border="1" id="gvExportDS" style="border-collapse:collapse;">
        <tr>
            <th scope="col">item1</th><th scope="col">item2</th><th scope="col">item3</th><th scope="col">item4</th>
        </tr><tr>
            <td>4375</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>7414</td><td>817264804</td><td>143</td><td>RevShare</td>
        </tr><tr>
            <td>9443</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>10464</td><td>817426643</td><td>164</td><td>RevShare</td>
        </tr><tr>
            <td>16040</td><td>817429938</td><td>1</td><td>rev</td>
        </tr><tr>
            <td>2304</td><td>817274966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>25423</td><td>817426643</td><td>164</td><td>rev</td>
        </tr><tr>
            <td>29445</td><td>817247966</td><td>260</td><td>Revenue</td>
        </tr><tr>
            <td>31412</td><td>14045392</td><td>22</td><td>Revenue</td>
        </tr><tr>
            <td>3240</td><td>817246643</td><td>164</td><td>RevShare</td></tr>
</table>') str from dual
) 
select x.td1, x.td2 , x.td3, x.td4 from t,
  xmltable('for $i in //tr
   return
   <tr>
     <td1>{$i/td[1]}</td1>
     <td2>{$i/td[2]}</td2>
     <td3>{$i/td[3]}</td3>
     <td4>{$i/td[4]}</td4>
   </tr>'               
  PASSING str
  COLUMNS
    td1 varchar2(20) path '/tr/td1',
    td2 varchar2(20) path '/tr/td2',
    td3 varchar2(20) path '/tr/td3',
    td4 varchar2(20) path '/tr/td4'
  ) x;

TD1                  TD2                  TD3                  TD4
-------------------- -------------------- -------------------- --------------------
4375                 817274966            260                  Revenue
7414                 817264804            143                  RevShare
9443                 817247966            260                  Revenue
10464                817426643            164                  RevShare
16040                817429938            1                    rev
2304                 817274966            260                  Revenue
25423                817426643            164                  rev
29445                817247966            260                  Revenue
31412                14045392             22                   Revenue
3240                 817246643            164                  RevShare
 
11 rows selected
14 июл 11, 17:57    [10975672]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить html  [new]
англикот
Guest
спасибо большое за помощь
14 июл 11, 18:20    [10975805]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить