XPathによる名前空間付きの値の取得


 XML::LibXMLモジュールを使うとXPathでノードを指定して値を取得できます。
 名前空間はXML::LibXML::XPathContextモジュールのregisterNsで指定します。
use strict;
use warnings;
use XML::LibXML;

my $file = 'data.xml';
my $ns = 'http://example.com/config';
my $xpath = '/ns:configuration/ns:appSettings/ns:add';

binmode STDOUT, ":encoding(cp932)"; # Windows向け

my $doc = XML::LibXML->load_xml(location => $file);
my $xc = XML::LibXML::XPathContext->new($doc);
$xc->registerNs('ns', $ns);

my @nodes = $xc->findnodes($xpath);
foreach my $node (@nodes) {
    my $key = $node->getAttribute('key');
    my $value = $node->getAttribute('value');
    printf "%s=%s\n", $key, $value;
}

__END__
上記のスクリプトはこんなXMLを対象としています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns="http://example.com/config">
  <appSettings>
    <add key="key1" value="値1" />
    <add key="key2" value="値2" />
    <add key="key3" value="値3" />
  </appSettings>
</configuration>

関連項目

XPathによる値の取得