2005-11-19, 21:08
#1
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<FileListing Version="1" CID="4V4V7WSF4AAWC" Base="/" Generator="*">
<Directory Name="*">
<Directory Name="*">
<Directory Name="*">
<File Name="*" Size="*" TTH="*"/>
</Directory>
</Directory>
</Directory>
</FileListing>
och nu ser jag att inlägget, som ligger som nummer tretton från toppen är två år gammalt...
use strict;
use warnings;
use File::Find;
# http://cpan.uwinnipeg.ca/dist/XML-LibXML (can be installed using PPM)
# http://search.cpan.org/~pajas/XML-LibXML-1.65/
use XML::LibXML;
# Clear command window
system('cls');
# Hash reference, for storing directory paths and number of occurences
my $directories;
# Root folder containing xml files
my $root_folder = 'C:\test';
# Get all xml files
my $xml_files = get_xml_files($root_folder);
# Create XMl parser
my $parser = XML::LibXML->new();
# For each xml file
for (@{$xml_files}) {
my $doc = $parser->parse_file($_);
my $root = $doc->documentElement();
# Fecth all <Directory> nodes
my @nodes = $root->getElementsByTagName('Directory');
# For each node, get Name attribute's value and store in global hash
for my $node (@nodes) {
$directories->{$node->getAttribute('Name')}++;
}
}
# Print result
print "Found " . (scalar @{$xml_files}) . " files in root $root_folder\nHits\tDirectory path\n";
for (keys %{$directories}){
print $directories->{$_} . "\t" . $_ . "\n";
}
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub get_xml_files {
my $root_folder = shift;
my @xml_files;
# Call back fo File::Find::find
my $cb = sub {
return if -d;
push @xml_files, $File::Find::name if /\.xml$/i;
};
find($cb, $root_folder);
return \@xml_files;
}
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Swish: 123 536 99 96 Bankgiro: 211-4106
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Swish: 123 536 99 96 Bankgiro: 211-4106