by Hippo2000(1999/10/18)
XML::Writerモジュールなのです。
なおこのドキュメントではXML::WriterのHTMLを元にしています。わかりにくい部分は本物を見てください。(^^;;
原本の著作権はDavid Megginsonさんがお持ちです。メールで了解をいただいています。
なお内容等が間違っていたら修正します。ご連絡ください
XML::Writer - XMLドキュメントを書き出すためのPerl拡張
use XML::Writer; use IO;
my $output = new IO::File(">output.xml");
my $writer = new XML::Writer(OUTPUT => $output);
$writer->startTag("greeting",
"class" => "simple");
$writer->characters("Hello, world!");
$writer->endTag("greeting");
$writer->end();
$output->close();
XML::Writer はXMLドキュメントを出力するPerlプログラムのためのヘルパー・モジュールです。このモジュールは、属性値や文字データのすべてのエスケープをおこない、タグ、コメント、処理命令といった異なるマークアップの型を作り出します。
デフォルトでは、このモジュールは出力時のエラーを捕らえるために、多くのウェルフォームド(整形式)であるかのチェックを行います。このチェックは開発やデバッグのとき、とても便利です。しかし製品グレードのコードのために、はずすこともできます。
このモジュールは通常モードもしくは名前空間処理モードで動作させることができます。名前空間モードでは、このモジュールは名前空間宣言そのものを生成し、出力時に追加のチェックを行います。
my $writer = new XML::Writer(OUTPUT => $output, NEWLINES => 1);
引数はパラメータの無名ハッシュになります。
my $rdfns = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";; my $writer = new XML::Writer(NAMESPACES => 1); $writer->startTag([$rdfns, "Description"]);
配列の最初の要素が名前空間URL、そして2番目の要素は修飾された名前のローカル部分となります。このモジュールは、適切な名前空間宣言を自動的に生成し、URI部分を接頭辞に置き換えます。
my $rdfns = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";;
my $writer = new XML::Writer(NAMESPACES => 1,
PREFIX_MAP => {$rdfns => 'rdf'});
ハッシュテーブルのキーが名前空間URIとなり、値が割り当てられる接頭辞になります。名前空間URIのための優先される接頭辞がそのハッシュになければ、モジュールは自動的に"_NS1", "_NS2"等の形式で接頭辞を生成します。
デフォルルトの名前空間を設定するためには、接頭辞を''としてください。
$writer->end();
$standalone
引数を指定すると、このモジュールは擬似属性'standalone'の値として、それの値をいれます。$writer->xmlDecl();
$writer->comment("This is a comment");
$writer->pi('xml-stylesheet', 'href="style.css" type="text/css"');
処理命令がドキュメント要素の外側に現れるならば(最初の開始タグの前または最後の終了タグの後のどちらか)、このモジュールは改行を追加して、読みやすくします。
$target 引数は単一のXML名でなければなりません。$data
引数を指定すると、このモジュールは$target引数の後ろに、1つの空白で区切って、その内容を挿入します。
$writer->startTag('doc', 'version' => '1.0',
'status' => 'draft',
'topic' => 'AT&T');
すべての開始タグは最終的に対応する終了タグを持たなければなりません。
$writer->emptyTag('img', 'src' => 'portrait.jpg',
'alt' => 'Portrait of Emma.');
$writer->endTag('doc');
$name
が省略されると、モジュールは現在開いている要素の名前を自動的に設定します。
$writer->startTag('p');
$writer->endTag();
$writer->characters("Here is the formula: ");
$writer->characters("a < 100 && a > 5");
このメソッドはドキュメント要素の中だけで呼び出すことができます。(つまり最初の開始タグの後で最後の終了タグの前)
if ($writer->in_element('dl')) {
$writer->startTag('dt');
} else {
$writer->startTag('li');
}
if ($writer->within_element('body')) {
$writer->startTag('h1');
} else {
$writer->startTag('title');
}
my $name = $writer->current_element();
これは以下のものと同等です。
my $name = $writer->ancestor(0);
警告: ドキュメントを書いている最中にこれらのメソッドを使ってはなりません、そうしなければ結果は予測できません。
デフォルトの名前空間を設定するには、$prefixパラメータを省略するか’’を設定してください。
デフォルトの名前空間を設定するには、$prefixパラメータを省略するか’’を設定してください。
デフォルトの設定では、XML::Writer モジュールはいくつかの基本的なXMLウェルフォームド(整形式)についてのエラーを検出することができます。
名前空間処理をするときには、このモジュールはさらに以下のエラーを検出することができます。
すべてのエラーが検出できるようにするためには、ドキュメントの書き出しが終了したらプログラムはendメソッドも呼び出さなければなりません。
$writer->startTag('greeting');
$writer->characters("Hello, world!");
$writer->endTag('greeting');
$writer->end();
このエラー報告はXMLドキュメントを生成するPerlプログラムの多くの隠れたバグを捕らえることができます。しかし必要であれば、UNSAFEパラメータを指定することにより、はずすこともできます。
my $writer = new XML::Writer(OUTPUT => $output, UNSAFE => 1);
David Megginson, david@megginson.com
XML::Parser
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。