XPath は XML ドキュメントに対するアドレッシングを行う技術です,みたいなことが W3C に書いてあるんですけど,まぁ今のところは XML のノード(とかノードセットとか)を探したり,ちょっと操作できるようにできるものって理解しているのでした.
今は http://www.w3schools.com/xpath/xpath_syntax.asp のチュートリアルを,XML::XPath
を使いながら進めています.
まずはこんなスクリプトを作りました.ヒットしたノード(セット)と,その string_value を表示するだけのものです.
#!/opt/local/bin/perl use strict; use warnings; use XML::XPath; my $xpath = shift; my $xml = <<'XMLDOC'; <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore> XMLDOC my $result = ''; my $xp = XML::XPath->new( xml => $xml ); for my $node ($xp->findnodes( $xpath )->get_nodelist) { $result .= $node->getName . ": " . $node->string_value; } $result =~ s/^\s*$//gm; print $result;
まずはテストしよう!
単純なロケーション・パス.
$ ./xpath-syntax.pl /bookstore bookstore: Harry Potter 29.99 Learning XML 39.95
"最後の book エレメントの値段" とかも指定できるぽいぞ!
$ ./xpath-syntax.pl '//book[last()]/price' price: 39.95
$35 以上の本のタイトルとかも指定できる!! すごい!!!!!
$ ./xpath-syntax.pl '//book[price>35.00]' book: Learning XML 39.95 $ ./xpath-syntax.pl '//book[price>35.00]/title' title: Learning XML
そういえば,XPath には OR なんて指定もできるみたいですね.
$ ./xpath-syntax.pl '//title | //price' title: Harry Potter price: 29.99 title: Learning XML price: 39.95
次は仕様に目を通す予定.