« Mac De PL/SQL RSS Reader #30 (XSLT編 #2) | トップページ | Mac De PL/SQL RSS Reader #32 (XSLT編 #4) »

2007年3月30日 (金) / Author : Hiroshi Sekiguchi.

Mac De PL/SQL RSS Reader #31 (XSLT編 #3)

前回前々回と、いきなりデバッグの後半部分とApex3.0 での動作確認を載せていたので、今回は、少しだけ解説を。

XSLTスタイルシートは、Oracleのディレクトリオブジェクトから読み込んだと書いたが、まずはその点から解説しておこう。
ディレクトリオブジェクトを作成し、Apex3.0でアプリケーションの格納に利用する「作業領域」に割り当てられたスキーマへディレクトリオブジェクトの読み込み権限を付与しておく。

SYS> create directory plsql_de_xslt as '/Volumes/Discus/4oracle/oracle/plsql_de_xslt/';

ディレクトリが作成されました。

SYS> grant read on directory plsql_de_xslt to aquarium;

権限付与が成功しました。

尚、「作業領域」に割り当てられているスキーマの確認方法は、
Application Express管理サービスにログイン->「作業領域の管理」->「作業領域とスキーマの割当の管理」

31 32
33 34
上記のスクリーンショットを見れば一目瞭然だが、作業領域:aquariumにaquariumスキーマが割り当てられていることが確認できる。


ディレクトリオブジェクトの準備が済んだら、事前に作成しておいたXSLTスタイルシート(文字エンコーディングは、UTF-8とした)をディレクトリオブジェクトに対応付けされたディレクトリへ配置する。(以下は配置後の状態)

discus:˜/plsql_de_xslt oracle$ pwd
/Volumes/Discus/4oracle/oracle/plsql_de_xslt
discus:˜/plsql_de_xslt oracle$ ls
RssToXhtml.xsl
discus:˜/plsql_de_xslt oracle$

PL/SQLでは、DBMS_XSLPROCESSOR.READ2CLOB()ファンクションを使って読み込むことができる。


例えば、
●ディレクトリオブジェクト名:"PLSQL_DE_XSLT"
●XSLTスタイルシート名:"RssToXhtml.xsl"
●文字エンコーディング: "UTF-8"

である場合は以下のように指定する。
注意する点は、キャラクタセットIDだろう。NLS_CHARSET_ID関数を利用しキャラクタセット名からキャラクタセットIDに変換する必要がある。また、指定するキャラクタセット名は、Oracle Database グローバリゼーション・サポート・ガイドに記載されている名称を指定する。 この例では、UTF8

==> 私もハマりました。つい、"UTF-8"って指定してしまって。。。(^^;;;; しばらく悩みました。。はい。

  tempClob :=  DBMS_XSLPROCESSOR.READ2CLOB(
'PLSQL_DE_XSLT',
'RssToXhtml.xsl',
NLS_CHARSET_ID('UTF8')
);

また、以前にも書いたが、 DBMS_XMLPARSER.PARSER(url)を使ってRSS FEEDをパースできればいいのだが、今のところ、マルチバイトを利用している場合には文字化けの影響があるので、面倒だがUTL_HTTPパッケージを利用し自前でCLOBに取込んでからパースするようにしている。 

| |

トラックバック


この記事へのトラックバック一覧です: Mac De PL/SQL RSS Reader #31 (XSLT編 #3):

コメント

コメントを書く