#!/usr/local/bin/perl
# CxF file からスペクトルの値を抜き出して表示
# by take-ash
# 2006.01.13
# 注) 文字コード:UTF-8N、改行:LF で、このperlスクリプトを保存すること。
use strict;
use utf8;
use XML::XPath;
#use Data::Dump qw(dump);
my $xp = XML::XPath->new( filename => 'Monitor_6500K.cxf' );
# print dump( $xp );
my $nodeset_samples = $xp->find( '/CXF/SampleSet/Sample' );
foreach my $node_sample ( $nodeset_samples->get_nodelist() ) {
my $name = $xp->findvalue( './Name', $node_sample );
printf( "Name:\t%s\n", $name );
my $nodeset_values = $xp->find( './SampleAttribute/Spectrum/Value', $node_sample );
foreach my $node_value ( $nodeset_values->get_nodelist() ) {
my $name = $xp->findvalue( './@Name', $node_value );
my $value = $xp->findvalue( '.', $node_value );
printf( "%s\t%s\n", $name, $value );
}
print "\n";
}
#EOF
ppm install XML-XPath
DTD を読ませないようにするには、LWP を無効化したパーサを指定する。
my $p = XML::Parser->new( NoLWP => 1 );
my $xp = XML::XPath->new( parser => $p, filename => "a.xhtml" );
How can I prevent XML::XPath from fetching a DTD while processing an XML file? - Stack Overflow
Perl/XML-Simple
CxF Color Exchange Format