單個文件編輯中處理多個XML「文件」:對不起,我輸錯「名」時,我的意思是「裁判」,我已經包括了完整的屬性以及用Perl
我有很多的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'屬性。然後我得到一個「未初始化的變量」錯誤。代碼是:
#!/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";
}
在您的示例XML有不是該列的「名稱」屬性,並且您的代碼中無處可見您訪問名稱屬性。也許更準確的例子會給出更好的答案。 – AFresh1
如果您提供了一點與您的代碼一起運行的實際樣本數據,這將更容易回答。 – runrig
示例數據就在第一個灰色框中。 –