sql - 如何获取标签值并替换存储在表中的html代码中的标签
问题描述
我有一段 html 代码存储在表中,我需要替换一些特定的标签。
<br><pws:img num="10956">Pic001</psw:img><br><br><table border="0" cellpadding="0" cellspacing="0" width="696" style="color: #000000; font-family: -webkit-standard; border-collapse: collapse; width: 522pt; border: 1px dashed #AAAAAA;" prevstyle="color: #000000; font-family: -webkit-standard; border-collapse: collapse; width: 522pt; border: 1px dashed #AAAAAA;"><tr><td><pws:img num="10201">Pic002</psw:img></td></tr></table>
pws:img
我需要替换所有出现的标签,<img src="files/NUM" alt="TEXT">
其中 NUM 是pws:img
标签中的 num 属性值(第一次出现 10956,第二次出现 10201),TEXT 是字符串(第一次出现 Pic001)
所以第一次<pws:img num="10956">Pic001</psw:img>
出现应该被替换为<img src="files/10956" alt="Pic001">
我使用 for cycle 和 regexp_replace/regexp_substr 制作了函数,但无法正常工作。谢谢帮助
解决方案
一般来说,不要使用正则表达式来解析 XML/HTML;pws:img
但是,如果您可以保证标签中没有嵌套元素,那么您可以使用以下内容:
CREATE TABLE test_data ( html ) AS
SELECT '<br><pws:img num="10956">Pic001</pws:img><br><br><table><tr><td><pws:img num="10201">Pic002</pws:img></td></tr></table>'
FROM DUAL
SELECT REGEXP_REPLACE( html, '<pws:img\s+([^>"]|".*?")*num\s*=\s*("(\d+)"|(\d+))([^>"]|".*?")*>.*?</pws:img>', '<img src="files/\3\4" alt="TEXT" />') AS replaced_html
FROM test_data
哪个输出:
| 替换_HTML | | :------------------------------------------------ -------------------------------------------------- ------------------ | | <br><img src="files/10956" alt="TEXT" /><br><br><table><tr><td><img src="files/10201" alt="TEXT" /> </td></tr></table> |
您也可以使用 FLOWR 表达式来执行此操作(如果您可以让您的 HTML 片段成为有效的 XHTML 文档):
SELECT XMLQUERY(
'copy $NEWHTML := .
modify (
for $i in $NEWHTML/body//pws_img
return replace node $i with <img num="{$i/@num}" alt="TEXT" />
)
return $NEWHTML/body/*'
PASSING XMLTYPE(
'<body>'
|| REPLACE( REPLACE( html, '<br>', '<br />' ), 'pws:img', 'pws_img' )
|| '</body>'
)
RETURNING CONTENT
).getStringVal() AS replacement_html
FROM test_data
输出:
| 替换_HTML | | :------------------------------------------------ -------------------------------------------------- ------ | | <br/><img num="10956" alt="TEXT"/><br/><br/><table><tr><td><img num="10201" alt="TEXT"/>< /td></tr></table> |
db<>在这里摆弄
推荐阅读
- sprite - 精灵表精灵添加
- python-3.x - Pandas/Dataframe:如何在条件失败时分配默认值,同时使用 python 从数据框中获取单个单元格值?
- compiler-construction - 编译器和解释器如何在一种语言中使用?
- java - 在java类中创建新实例
- c++ - 赋值中的折叠表达式
- asp.net - 在 Azure 上预热站点之前不提供请求
- python - 使用谷歌云 API 对 pdf 文件进行 OCR
- c# - 请求json数据
- opengl - 如何正确管理opengl着色器?
- python - Scrapy 跟踪来自 HTML 的链接数据链接(不是 href)