我有這樣的文字。
<div>
blabla <b> BOLD </b> babla <b> BOLD2</b> blabla
<table width="100%">
<tr>
<td valign="top" style="width:30px">-</td>
<td>blabla <b>BOLD3</b></td>
</tr>
</div>
我想提取 b 標簽之間的單詞。但是有幾個路徑。
SELECT t1,t2
FROM mytext,
XMLTABLE (
'/div'
PASSING xmltype (raw_text.inhalt)
COLUMNS t2 VARCHAR2 (1000) PATH './b', --
t1 VARCHAR2 (1000) PATH './table/tr/td/b'))
[錯誤] 執行 (11: 1): ORA-19279: XPTY0004 - XQuery 動態型別不匹配:預期的單例序列 - 得到多項序列
uj5u.com熱心網友回復:
假設您的 HTML 是有效的 XML(情況并非總是如此,因為它需要單個根節點并且所有開始標簽都被關閉)然后給出示例資料:
CREATE TABLE mytext (rawtext CLOB);
INSERT INTO mytext (rawtext) VALUES (
'<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/TR/xhtml1/strict" >
<div>
blabla <b> BOLD </b> babla <b> BOLD2</b> blabla
<table width="100%">
<tr>
<td valign="top" style="width:30px">-</td>
<td>blabla <b>BOLD3</b></td>
</tr>
</table>
</div>
</html>'
);
然后你可以使用:
SELECT bold
FROM mytext m
CROSS JOIN XMLTABLE (
XMLNAMESPACES(DEFAULT 'http://www.w3.org/TR/xhtml1/strict'),
'//b'
PASSING XMLTYPE(m.rawtext)
COLUMNS bold VARCHAR2(1000) PATH './text()'
)
哪個輸出:
大膽的 BOLDBOLD2BOLD3
db<>在這里擺弄
uj5u.com熱心網友回復:
這個版本也可以。而且您不必添加更多的 html 標記。你只需要洗掉XMLNAMESPACES(DEFAULT 'http://www.w3.org/TR/xhtml1/strict')
CREATE TABLE mytext (
rawtext CLOB
);
INSERT INTO mytext (rawtext) VALUES (
'<div>
blabla <b> BOLD </b> babla <b> BOLD2</b> blabla
<table width="100%">
<tr>
<td valign="top" style="width:30px">-</td>
<td>blabla <b>BOLD3</b></td>
</tr>
</table>
</div>'
);
SELECT bold
FROM mytext m
CROSS JOIN XMLTABLE (
'//b'
PASSING XMLTYPE(m.rawtext)
COLUMNS bold VARCHAR2(1000) PATH './text()'
)
https://dbfiddle.uk/?rdbms=oracle_21&fiddle=0889004081eb0c86bf3b869d953cf04e
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452388.html
