sironekotoroの日記

Perl で楽をしたい

独習Perl 第2版 第11章 XML

  • いよいよ最終章。長かった・・・

11.1 XML

11.2 XMLパーサ

  • XML文書をパーサで解析するってのは理解できたけど、練習問題の「CGIを使って入力された文字列をパースし、結果を表示する」ってのが分からなかった。
my $content = $query->param('xml');

(中略)
my $parser = new XML::Parser(ErrorContext =>3);
eval("\$parser->parse(\$content)");
  • htmlフォームで入力された文字列を$contentに格納する、これは分かる
  • 格納した$contentのリファレンスを、$parserのリファレンスでパースする????
  • わからねぇ・・・

11.3 XMLの変換

  • 本に載ってるヤツがどうにも動かなかった
  • 悔しいので、他のモジュール使って解決
use utf8;
use Encode;
use Data::Dumper;
use XML::Simple;

my $xml = <<'XML'
<?xml version="1.0" encoding="utf-8"?>
<addressbook>
  <title>住所録</title>
  <info>
      <name>鈴木</name>
      <address>東京都世田谷区</address>
      <tel>03-xxxx-xxxx</tel>
  </info>
  <info>
      <name>山田</name>
      <address>大阪府大阪市</address>
      <tel>06-xxxx-xxxx</tel>
  </info>
  <info>
      <address>宮城県仙台市</address>
      <name>佐藤</name>
      <tel>022-xxx-xxxx</tel>
  </info>
</addressbook>
XML
;

my $parser = XML::Simple->new;
my $data   = XMLin($xml);

foreach ( keys $data->{info} ) {
    my $line
        = $_ . ','
        . $data->{info}->{$_}->{address} . ','
        . $data->{info}->{$_}->{tel} . "\n";
    print encode ( utf8, $line );

}

11.4 XMLの検索

  • XPathを使ったノードのたどり方や要素の抜き出し方、要素数などの求め方

「独習Perl 第2版」終わり。

  • 例示されているスクリプトuse strict,use warningsが無くて難儀した
    • 2010年に改版したときに追加しなかったんかな
  • CGI、特にsocket使ってサーバとクライアントで通信をさせるのは楽しかったし、なんか可能性を感じる
    • でも、セキュリティ的に怖いー
  • CGIスクリプトをmojoliciousで書き直してみるのも勉強にな理想とか思ったり