Отредактировано: Извините, я неправильно набрал 'name', когда имею в виду 'ref', а также включил полные атрибуты
У меня есть несколько xml-файлов, в одной строке которых содержится полный xml-документ. Примером может быть:
<Reqeusts>
<WRRequest><Request domain="foo.com"><Rows><Row includeascolumn="n" interval="hour" ref="time" type="group"/><Row includeascolumn="n" ref="domain_id" type="group"/><Row />...</Rows><Columns><Column ref="user_id"/><Column ref="country_id"/><Column ref="country_name"/>...</Columns></Request></WRRequest>
.
.
.
</Requests>
Есть также ряд атрибутов, которые я не включаю для ясности.
Я анализирую это, используя XML :: Parser & XML :: SimpleObject, которые прекрасно работают до определенного момента. Например, я просто распечатываю атрибуты каждого из элементов, которые работают, за исключением случаев, когда я пытаюсь распечатать атрибут ref элемента column. Затем я получаю ошибку «неинициализированная переменная». Код:
#!/usr/bin/perl
use warnings;
use diagnostics;
use XML::Parser;
use XML::SimpleObject;
use Cwd;
if ($ARGV[0] eq "") {
die "usage: sumXML.pl <input file> \n";
}
my $fileName = $ARGV[0];
my $parser = new XML::Parser(Style => 'Tree');
my $xso = XML::SimpleObject->new( $parser->parsefile("$fileName") );
foreach my $wrRequest ($xso->child('WRRequests')->children('RWRequest')) {
print "Client Name: " . $wrRequest->attribute('clientName') . "\n";
foreach my $xmlRequest ($wrRequest->child('REQUEST')) {
print "Domain name: " . $xmlRequest->attribute('domain') . "\n";
print "Service: " . $xmlRequest->attribute('service') . "\n";
foreach my $xmlRow ($xmlRequest->child('ROWS')->children('ROW')) {
print "Row Reference: " . $xmlRow->attribute('ref') . "\n";
}
foreach my $xmlColumn ($xmlRequest->child('COLUMNS')->children('COLUMN')) {
print "Column Reference: " . $xmlColumn->attribute('ref') . "\n";
}
}
print "\n";
}