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 -