Ok, that was a stupid question of mine
I am not able to reach in to my xml without using any specific xml tage titles.
This is what I got now:
<A>
<B>
<C>
<element type="k" name="p" online="yes"/>
<element type="i" name="e" online="yes"/>
<element type="y" name="z" online="yes"/>
<element type="a" name="q" online="yes"/>
<element type="z" name="d" online="yes"/>
<element type="t" name="p" online="yes"/>
</C>
</B>
</A>
And
#!/usr/bin/perl --
use strict;
use warnings;
use Cwd;
use Win32::OLE;
use XML::Simple;
my $dir = cwd();
opendir(DIR, ".");
my @file = grep(/\.xml$/,readdir(DIR));
closedir(DIR);
use Data::Dumper;
local $Data::Dumper::Indent=1;
#print Dumper($doc);
my $xs1 = XML::Simple->new();
my $doc = $xs1->XMLin($file[0], keyattr=>[], ForceContent=>1, ForceArr
+ay=>1);
for my $sub1 ( sort keys %{ $doc } ){
my $count = scalar keys %{ $doc };
print "\n$sub1\t";
for (my $i=0; $i <= $count; $i++) {
for my $sub2 ( sort keys %{ $doc->{$sub1}[$i] } ){
my $count2 = @{$doc->{$sub1}[$i]{$sub2}};
print "\n\t\t".$count2."\t".$sub2;
for (my $j=0; $j <= $count2; $j++) {
for my $sub3 ( sort keys %{ $doc->{$sub1}[$i]{$sub2}[$
+j] } ){
my $count3 = @{$doc->{$sub1}[$i]{$sub2}[$j]{$sub3}
+};
print "\n\t\t\t\t$count3\t$sub3";
for (my $k=0; $k <= $count3; $k++) {
for my $sub4 ( sort keys %{ $doc->{$sub1}[$i]{
+$sub2}[$j]{$sub3}[$k] } ){
print "\n\t\t\t\t\t$sub4";
}
}
}
}
}
}
}
This works very nice, I am quite pleased. BUT how do I make a difference between an attribute and a normal tag?
As you can see in the output ... element (tag) and name type and online (attributes) have no difference, as I see it.
Every piece of code must NOT contain any words that are in my xml. The code I posted does not contain any 'A' 'B' nor 'C' or 'element'
-So how can I seperate the tag names from the attributes?
-How can I reach the content of that attribute ? X in type="X"
Thanks !
PS: This script will serve as an XML to Excell converter, I have the Excell part figured out with the OLE32 module. I will post the complete script when its done. |