0

我一直在互联网上寻找解决这个问题的方法。基本上,我正在使用公司提供的网络服务,该服务运行我们的支持软件来检索客户票证并通过我们的系统输出它们(取决于过滤),以便客户可以从他们的仪表板中看到他们当前有效的支持票证。我已经设法从通过 Web 服务返回的 XML 中获取所需的标签,并将它们的内容放在一个 html 表中(因此在表中逐行列出活动票证),因为票证描述标签填充了来自客户发送的电子邮件的内容,有很多讨厌的冗余 css 和样式已应用于我要删除的电子邮件。

到目前为止,我已经设法使用“替换”功能来替换此电子邮件内容中的一些冗余内容 ->

        l_html_build := replace(l_html_build,'&lt;','<');
        l_html_build := replace(l_html_build,'&gt;','>');
        l_html_build := replace(l_html_build,'&amp;lt;','');
        l_html_build := replace(l_html_build,'&amp;gt;','');
        l_html_build := replace(l_html_build,'&amp;nbsp;','&nbsp;');

但是我现在需要覆盖添加了各种垃圾的 p 标签,以便它们成为标准的 p 标签->

    From this:
    <p 0in;&quot;="" 3.0pt="" padding:="" 1.0pt;="" solid="" border-top:="" none;="" _mce_style=""border:" 0in&quot;="" 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。

任何帮助将不胜感激。

4

2 回答 2

2

知道:

你只剩下几个选择(我能想到的):

  1. 自己编写一个简单的过程,它可以在大多数情况下工作(但会有很多异常会破坏你的解析器)。
  2. 使用 java 解析器,在数据库中加载类,从 PL/SQL 调用 java。Oracle 带有它的集成 jvm,所以这不需要额外的设置。

如果您想要可靠性,我会选择选项(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 注释——我不确定是否可以使用正则表达式来完成。

于 2013-02-22T14:42:04.747 回答
1

SQL 确实不是这项工作的最佳工具。正则表达式也不能可靠地执行这种任务。您最好使用 XML 解析器提取数据并以另一种语言处理它。

据推测,甲骨文本身并没有发送这些电子邮件。发送什么程序,您可以在那时添加一些程序处理吗?

由于您已经了解 PHP,因此这里讨论在 PHP 中解析 HTML/XML。大多数其他语言都有类似的工具。

于 2013-02-22T14:11:00.173 回答