Perl Best Practices
Damian Conway
0596001738
542
Perl Cookbook, Second Edition
Tom Christiansen
Nathan Torkington
0596003137
964
Guitar for Dummies
Mark Phillips
John Chappell
076455106X
392
####
#!/usr/bin/perl
use strict;
use warnings;
my $filename = 'library.xml';
##
##
use XML::Simple qw(:strict);
my $library = XMLin($filename,
ForceArray => 1,
KeyAttr => {},
);
foreach my $book (@{$library->{book}}) {
print $book->{title}->[0], "\n"
}
##
##
use XML::LibXML;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);
foreach my $book ($doc->findnodes('/library/book')) {
my($title) = $book->findnodes('./title');
print $title->to_literal, "\n"
}
##
##
foreach my $title ($doc->findnodes('/library/book/title')) {
print $title->to_literal, "\n"
}
##
##
print $_->data . "\n" foreach ($doc->findnodes('//book/title/text()'));
##
##
use XML::Simple qw(:strict);
my $isbn = '0596003137';
my $library = XMLin($filename,
ForceArray => [ 'book', 'author' ],
KeyAttr => { book => 'isbn' }
);
my $book = $library->{book}->{$isbn};
print "$_\n" foreach(@{$book->{author}});
##
##
use XML::LibXML;
my $isbn = '0596003137';
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);
my $query = "//book[isbn/text() = '$isbn']/author/text()";
print $_->data . "\n" foreach ($doc->findnodes($query));
##
##
my $library = XMLin($filename, ForceArray => [ 'book' ], KeyAttr => {});
foreach my $book (@{$library->{book}}) {
print $book->{isbn}, "\n" if $book->{pages} > 900;
}
##
##
use XML::Simple qw(:strict);
my $isbn = '076455106X';
my $xs = XML::Simple->new(
ForceArray => 1,
KeyAttr => { },
KeepRoot => 1,
);
my $ref = $xs->XMLin($filename);
my $books = $ref->{library}->[0]->{book};
my($book) = grep($_->{isbn}->[0] eq $isbn, @$books);
$book->{pages}->[0] = '394';
print $xs->XMLout($ref);
##
##
use XML::LibXML;
my $isbn = '076455106X';
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($filename);
my $query = "//book[isbn = '$isbn']/pages/text()";
my($node) = $doc->findnodes($query);
$node->setData('394');
print $doc->toString;
##
##
my($book) = $doc->findnodes("//book[isbn = '$isbn']");
my $library = $book->parentNode;
$library->removeChild($book);
##
##
my $rating = $doc->createElement('rating');
$rating->appendTextNode('5');
$book->appendChild($rating);
##
##
$book->appendTextChild('rating', '5');
##
##
my $fragment = $parser->parse_balanced_chunk(
'532.00'
);
$book->appendChild($fragment);
##
##
xmllint --format -