11ϤΥץ륳
---------------------
ܼʥڡֹ
P239
P240
P242-1
P242-2
P245
P246
P247
P251
P253
---------------------

P239
<?xml version="1.0" encoding="utf-8"?>
<book>
  <title>XMLΥץ</title>
  <chapter id="introduction">
    <title>Ҳ</title>
    <para><emphasis>XML</emphasis>Extensible Markup Language
      ϡW3CȤΤˤä줿ѥޡå׸פǤ</para>
    <para>&lt;&gt;ˤɽˤϡ&amp;lt;&amp;gt;Ȥޤ
    </para>
  </chapter>
</book>

P240
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "docbookx.dtd">
<book>
  <title>XMLΥץ</title>
  <chapter id="introduction">
    <title>Ҳ</title>
    <para><emphasis>XML</emphasis>Extensible Markup Language
      ϡW3CȤΤˤä줿ѥޡå׸פǤ</para>
    <para>&lt;&gt;ˤɽˤϡ&amp;lt;&amp;gt;Ȥޤ
    </para>
  </chapter>
</book>

P242-1
# ñXMLѡ
#  xml-parse.pl

use XML::Parser;
$parser = new XML::Parser( );
eval ( "\$parser->parsefile( \@ARGV[0] );" );

if ($@) {
  print @ARGV[0] . "XMLɥȤǤ顼ϼΤȤ: $@";
} else {
  print @ARGV[0] . "XMLɥȤǤ\n";
}

P242-2
# ñXMLѡʥ顼åŬ
#  xml-parse2.pl

use XML::Parser;
$parser = new XML::Parser( );
eval ( "\$parser->parsefile( \@ARGV[0] );" );

if ($@) {
  chomp($@);
  $@ =~ s/^\n//;
  $@ =~ s/ at (?:[A-Z]:)?\/.*//;
  print @ARGV[0] . "XMLɥȤǤ (顼: $@)\n";
} else {
  print @ARGV[0] . "XMLɥȤǤ\n";
}

P245
# ̾°ɽ
#  element.pl
use XML::Parser;

# ϥɥդǥ֥Ȥ
$parser = new XML::Parser( Handlers => 
                          {Start => \&element_start,
                           End => \&element_end });

# ǥȤΥ
$level = 0;

# Ϥμ¹
eval ( "\$parser->parsefile( \@ARGV[0] );");

if ($@) {
  chomp($@);
  $@ =~ s/^\n//;
  $@ =~ s/ at (?:[A-Z]:)?\/.*//;
  print @ARGV[0] . "XMLɥȤǤ (顼: $@)\n";
}

sub element_start {
  # Ǥγ
  my ($expat, $name, %attributes) = @_;
  print "  " x $level;
  # ̾°ɽ
  print $name;
  if (%attributes) {
    print ": ";
    foreach (keys ( %attributes ) ) {
      print "$_=" . $attributes{$_} . " ";
    }
  }
  print "\n";
  $level++;
}

sub element_end {
  # Ǥνλ
  $level--;
}

P246
# ȤcommentǤѴXML
#  comment_converter.pl
use encoding "utf8", STDOUT=>"Shift_JIS";
use XML::Parser;

# ϥɥդǥ֥Ȥ
$parser = new XML::Parser( Handlers => 
                          {Start => \&element_start,
                           Char => \&cdata,
                           Comment => \&comment,
                           End => \&element_end });

# Ϥμ¹
eval ( "\$parser->parsefile( \@ARGV[0] );");

if ($@) {
  chomp($@);
  $@ =~ s/^\n//;
  $@ =~ s/ at (?:[A-Z]:)?\/.*//;
  print @ARGV[0] . "XMLɥȤǤ (顼: $@)\n";
}

sub element_start {
  # Ǥγ
  my ($expat, $name, %attributes) = @_;
  print "<$name";
  if (%attributes) {
    foreach (keys ( %attributes ) ) {
      print " $_=\"" . $attributes{$_} . "\"";
    }
  }
  print ">";
}

sub element_end {
  # Ǥνλ
  my ($expat, $name) = @_;
  print "</$name>\n";
}

sub cdata {
  # ƥȥǡ
  my ($expat, $context) = @_;
  print $context if ($context !~ /^\s+$/);
}

sub comment {
  # ȡǤѴ
  my ($expat, $context) = @_;
  # λȤؤѴ
  $context =~ s/\&/\&amp;/g;
  $context =~ s/</\&lt;/g;
  $context =~ s/>/\&gt;/g;

  print "<comment>$context</comment>\n" if ($context !~ /^\s+$/);
}

P247
<?xml version="1.0" encoding="utf-8"?>
<book>
  <title>XMLΥץ</title>
  <chapter id="introduction" keyword="sample">
    <title><!-- XML -->Ҳ</title>
    <para><emphasis>XML</emphasis>Extensible Markup Language
      ϡW3CȤΤˤä줿ѥޡå׸פǤ</para>
    <para><!-- <;>;ˤɽˤϡ&lt;&gt;Ȥޤ--></para>
  </chapter>
</book>

P251
# XPathˤ븡
#  xpath.pl

use encoding "utf8", STDOUT=>"Shift-JIS";
use XML::XPath;

$xpath = new XML::XPath ( filename => $ARGV[0] );
# ѥθ
$nodeset = $xpath->find($ARGV[1]);

foreach ($nodeset->get_nodelist( )) {
  # ΡɤƤɽ
  print $_->toString( ) . "\n";
}

P253
# XPathˤ븡
#  xpath_counter.pl

use XML::XPath;
$xpath = new XML::XPath ( filename => $ARGV[0] );

# ѥ¸߳ǧ
if ($xpath->exists($ARGV[1])) {
  # ѥθ
  $nodeset = $xpath->find($ARGV[1]);
  print "ѥ $ARGV[1]  " . $nodeset->size( )  . " Ĥޤ\n";
} else {
  print "ѥ $ARGV[1] Ϥޤ\n";
}
