आपका 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 को XML के रूप में पार्स करने का प्रयास करना नासमझी क्यों माना जाता है।