Modifié: Désolé, je mal orthographié « name » quand je veux dire « ref » et j'ai inclus les attributs complets aussi bienGérer plusieurs « documents » XML dans un seul fichier avec Perl
J'ai un certain nombre de xml les fichiers contenant, sur une seule ligne, un document XML complet. Un exemple serait:
<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>
Il y a un certain nombre d'attributs aussi bien que je ne suis pas compris pour des raisons de clarté. Je l'analyse avec XML :: Parser & XML :: SimpleObject qui fonctionne bien jusqu'à un certain point. Par exemple, je ne fais qu'imprimer les attributs de chacun des éléments qui fonctionnent sauf quand j'essaie d'imprimer l'attribut 'ref' de l'élément column. Ensuite, je reçois une erreur "variable non initialisée". Le code est:
#!/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";
}
Dans votre XML exemple, il n'est pas un attribut 'name' de la colonne, et nulle part dans votre code, vous semblez accéder à un attribut de nom. Peut-être qu'un exemple plus précis donnerait de meilleures réponses. – AFresh1
Il serait plus facile de répondre si vous fournissiez un peu de données d'exemple réelles qui ont fonctionné avec votre code. – runrig
Les données d'échantillon sont là dans la première case grise. –