XPathクエリを使用して、興味のある値を抽出します。これらの3つのXPathクエリは、探している値を返します。
//BOOK-REF/@ID
//BOOK-REF/AUTHOR-REF/SURNAME
//BOOK-REF/YEAR-REF
XPathクエリを実行するには、 xml :: LibXML のようなものを使用します。完全な例:
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML->load_xml(string => q{<?xml version="1.0" encoding="utf-8"?>
Neinstein, L. S., Gordon, C. G., Katzman, D., Rosen, D., & Woods, E. (2007). Adolescent health care: A practical guide (5th ed.). Philadelphia: Lippincott Williams and Wilkins.
});
my $xc = XML::LibXML::XPathContext->new($xml);
my $id = $xc->find('//BOOK-REF/@ID');
my @snames = map $_->textContent => $xc->findnodes('//BOOK-REF/AUTHOR-REF/SURNAME');
my $year = $xc->find('//BOOK-REF/YEAR-REF');
print "$id\n";
print join(', ' => @snames), "\n";
print "$year\n";
# prints:
# Kyle-ch001-bib036
# Neinstein, Gordon, Katzman, Rosen, Woods
# 2007
結果を次のような配列にうまく保存することができます:
push @some_array, +{
id => $id,
snames => \@snames,
year => $year
};
元のスキームに従い、各snameのIDと年を複製する場合は、次のようになります。
push @arr2, map [ $id, $_, $year ] => @snames;
それらを格納するもう1つの潜在的に有用な方法は、idフィールドの上にキー入力されたハッシュになります。
$some_hash{$id} = +{
id => $id,
snames => \@snames,
year => $year
};