in reply to Re^3: XML :: Simple
in thread XML :: Simple

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.

Replies are listed 'Best First'.
Re^6: XML :: Simple
by runrig (Abbot) on Nov 06, 2008 at 16:45 UTC
    With XML::Simple you can't tell the difference between an attribute and a sub-tagname. You may want to use some other module, like XML::LibXML.