0

この問題の解決策を見つけようとして、インターネットをトロールしてきました。基本的に私は、サポート ソフトウェアを実行する会社が提供する Web サービスを使用して顧客チケットを取得し、システムを介してそれらを出力します (フィルタリングに応じて)。これにより、顧客は現在アクティブなサポート チケットをダッシュ​​ボードから確認できます。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>

ここpsougにリストされている regEXP 関数の使用を調べましたが、これには毎回実行される 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 パーサーを使用して別の言語で処理する方がよいでしょう。

おそらく、Oracle 自体がこれらの電子メールを送信していません。送信を行うプログラムは何ですか?その時点でプログラムによる処理を追加できますか?

既に PHP を知っているので、ここでは PHP での HTML/XML の解析について説明します。同様のツールは、他のほとんどの言語で利用できます。

于 2013-02-22T14:11:00.173 に答える