XML::Grove::Substモジュール(日本語チョー訳)

by Hippo2000(1999/12/23)

XML::Grove::Substモジュールなのです。

なおこのドキュメントはXML::Groveモジュールをインストールしたときに一緒にはいるドキュメントを日本語に訳そうとしたものです。わかりにくい部分は本物を見てください。(^^;;

原本の著作権はKen MacLeod氏がお持ちです。
Ken MacLeodさんにはメールで了解をいただきました。

なお内容等が間違っていたら修正します。ご連絡ください。



NAME

XML::Grove::Subst - 値をテンプレートで置換します。


概要

 use XML::Grove::Subst;
 # XML::Grove::Document または XML::Grove::Elementにsubstメソッドを使う:
 $new_grove = $source_grove->subst( ARGS );
 $new_grove = $source_grove->subst_hash( ARG );
 # XML::Grove::Subst インスタンスを使う:
 $subster = XML::Grove::Subst->new();
 $new_grove = $subster->subst( $source_grove, ARGS );
 $new_grove = $subster->subst_hash( $source_grove, ARG );

説明

XML::Grove::Subst はXMLテンプレートを実装しています。XML::Grove::Substは元のGrove全体を詳しく解析し、'SUB:XXX'や'SUB:KEY'という名前を持ったすべての要素をAGRS(リスト)またはARS(ハッシュ)の対応する値で置き換えます。


メソッド

$grove_obj->subst( ARGS ) =item $subster->subst( $grove_obj, ARGS )
'SUB:XXX'という要素を探します。XXXは配列のインデックスで、リストの値であるARGSからの値でその要素を置き換えます。戻り値は置換が適用された新しいGroveです。
$grove_obj->subst_hash( ARG ) =item $subster->subst_hash( $grove_obj, ARG )
'SUB:key'要素を探し、値のハッシュであるARGからの値でその要素を置き換えます。ハッシュのキーは'SUB:key'要素の'key'属性から取られます。例えば'<SUB:key key='foo'>'。戻り値は置換が適用された新しいGroveです。

使用例

以下のテンプレート、ファイル'template.xml'は、単純な部品データベースをHTMLに変換するために使うことができます:

    <html>
      <head>
        <title><SUB:key key='Name'></title>
      </head>
      <body>
        <h1><SUB:key key='Name'></title>
        <p>Information for part number <SUB:key key='Number'>:</p>
        <SUB:key key='Description'>
      </body>
    </html>

このテンプレートを使うには、まずそれを解析し、そしてGroveに変換します。そして新しいページが必要になるたびに'subst_hash()'を使います:

    use XML::Parser::PerlSAX;
    use XML::Grove;
    use XML::Grove::Builder;
    use XML::Grove::Subst;
    use XML::Grove::PerlSAX;
    use XML::Handler::XMLWriter;
    # テンプレートのロード
    $b = XML::Grove::Builder->new();
    $p = XML::Parser::PerlSAX->new( Handler = $b );
    $source_grove = $p->parse( Source => { SystemId => 'template.xml' } );
    # 置換の適用
    $new_grove = $source_grove->subst_hash( { Name => 'Acme DCX-2000 Filter',
                                              Number => 'N4728',
                                              Description => 'The Best' } );
    # 新しいGroveを標準出力に書き出します
    $w = XML::Handler::XMLWriter->new();
    $wp = XML::Grove::PerlSAX->new( Handler => $w );
    $wp->parse( Source => { Grove => $new_grove } );

作者

Ken MacLeod, ken@bitsko.slc.ut.us


参考資料

perl(1), XML::Grove(3)

Extensible Markup Language (XML) <http://www.w3c.org/XML>


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。