解析XML文件,我想按以下從XML文件中提取值:用Perl
<?xml version="1.0" encoding = "UTF-8" ?>
<!-- SAP Data Services generated XML -->
<!-- 2017-05-26.22:12:03(409,091)[1] -->
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CreatedAt>2017-05-26T22:12:11</CreatedAt>
<CreateBy>BJOB_ODS_WF5MD_WEBSITE_FILES_5MIN_DATA</CreateBy>
<StartDate>2017-05-21T00:00:00</StartDate>
<DataSet Series = "5_Minute" ><Data><Value>10875.60</Value>
</Data>
....
<DataSet Series = "Actual" ><Data><Value>11150.00</Value>
</Data>
<Data><Value>10700.00</Value>
</Data>
<Data><Value>10450.00</Value>
</Data>
...
</Data>
</DataSet>
</Root>
盼望以下輸出爲CSV,但沒有得到愛與下面的腳本:
11150.00
10700.00
10450.00
****SCRIPT
use warnings;
use strict;
use XML::Twig;
#<DataSet Series = "Actual" ><Data><Value>11112.60</Value
my $file = '/var/data/Actual.xml' ||die $!;
my $t=XML::Twig->new();
$t->parsefile($file);
# my @sets = $t->findnodes('//DataSet[@seriesName= "Actual" ]/set');
# I CHANGED THE ABOVE AND MODIFIED AS SHOWN BELOW
my @sets = $t->findnodes('//DataSet[@Series= "Actual" ]/Value');
if (@sets) {
my $outfile = '/var/csv/actual.csv';
open my $out, ">", $outfile or die "Could not open $outfile: $!";
print { $out } $_->att('Value')."\n" for @sets;
}
任何幫助將不勝感激。
XML中沒有'set'元素,但是你的xpath表達式要求輸入一個元素。我現在不能嘗試,但是你應該對DataSet [@ seriesName =「Actual」]/Data/Value'很好,然後不要使用'$ _-> att',因爲'Value'是不是屬性。有了上面的xpath,你將有節點,你可以訪問文本屬性。我不記得如何檢查文檔。 – simbabque