如何提取 html 文本中的所有粗体字
How to extract every bold words in a html text
我有这样的文字。
<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'))
[Error] Execution (11: 1): ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence
假设您的 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()'
)
输出:
BOLD
BOLD
BOLD2
BOLD3
db<>fiddle here
这个版本也可以。而且您不必添加更多 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
我有这样的文字。
<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'))
[Error] Execution (11: 1): ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence
假设您的 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()'
)
输出:
BOLD BOLD
BOLD2
BOLD3
db<>fiddle here
这个版本也可以。而且您不必添加更多 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