我一直在搜索互联网,试图找到解决这个问题的方法。基本上我使用运行我们的支持软件的公司提供的Web服务来检索客户票并通过我们的系统输出它们(取决于过滤),以便客户可以从他们的仪表板上看到他们当前支持的活动票。我已经设法从通过Web服务返回的XML中获取所需的标记,并将其内容放在html表中(因此在表中逐行列出活动票证)但是,因为票证描述标记填充了来自客户端发送的电子邮件的内容,有很多令人讨厌的冗余css和样式已应用于我想删除的电子邮件。
到目前为止,我已设法使用'替换'功能替换此电子邮件内容中的一些冗余内容 - >
l_html_build := replace(l_html_build,'<','<');
l_html_build := replace(l_html_build,'>','>');
l_html_build := replace(l_html_build,'&lt;','');
l_html_build := replace(l_html_build,'&gt;','');
l_html_build := replace(l_html_build,'&nbsp;',' ');
但是我现在需要覆盖添加了各种垃圾的p标签,以便它们成为标准的p标签 - &gt;
From this:
<p 0in;"="" 3.0pt="" padding:="" 1.0pt;="" solid="" border-top:="" none;="" _mce_style=""border:" 0in"="" 0in="" 1.0pt;padding:3.0pt="" #b5c4df="" style=""border:none;border-top:solid">
To this:
<p>
我已经研究过使用此处列出的regEXP函数psoug但是这似乎需要每次执行的select语句。我需要操作的数据存储在一个名为l_html_build的CLOB中,所以有什么方法可以调整regEXP函数以类似于上面替换函数的方式使用,还是有一种我不知道的替代方法?
如果这是一个菜鸟问题,我道歉。我的专长在于前端开发,PHP和MySQL,但不幸的是我现在需要在我的新角色中使用PL / SQL。
非常感谢任何帮助。
答案 0 :(得分:2)
知道:
你剩下的选择很少(我能想到):
如果您需要可靠性,我会选择选项(2),如果不经常但不可避免的损失可以接受,我会选择选项(1)。
由于您的内容将来自电子邮件客户端,我们可以假设只有一小部分(可忽略的?)部分会有非常模糊的HTML。
在这种情况下,您可以从可能需要进行一些调整的简单正则表达式开始:
SQL> SELECT regexp_replace(
2 '<p1 3.0pt="" padding:="" #b5c4df="">
3 text
4 </p>',
5 '<([[:alpha:]]+)[^>]*>',
6 '<\1>') remove_attr_simple
7 FROM dual;
REMOVE_ATTR_SIMPLE
------------------
<p>
text
</p>
这将无法捕获棘手的有效HTML(例如<P attr=">">
),但由于您的输入有些标准,因此这应该很好。您可能需要使用其他过程删除HTML注释 - 我不确定是否可以使用正则表达式完成。
答案 1 :(得分:1)
SQL实际上不是这项工作的最佳工具。正则表达式也不能可靠地执行此类任务。您最好使用XML解析器提取数据并使用其他语言处理数据。
据推测,Oracle本身并未发送这些电子邮件。发送什么程序,你能在那时添加一些程序化处理吗?
由于您已经了解PHP,here is a discussion of parsing HTML/XML in PHP。大多数其他语言都提供类似的工具。