These links contain all the documentation that I am aware of.
http://search.cpan.org/~mirod/XML-Twig-3.29/Twig.pm http://xmltwig.com/xmltwig/ Hope that helps. On 6/13/07, Jim <[EMAIL PROTECTED]> wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Thanks Bob Tried out your samples, and I think I'll probably roll with a Twig solution. It looks a heckuva lot more complicated than XML::Simple, but it seems to actually work. Hopefully I can get past the learning curve ;-) Are there any really good documentation references for XML::Twig you might point me to? Thanks. - -jim- On Jun 12, 2007, at 7:48 PM, Bob Faist wrote: > Here is a script using XML::Twig: > > #!/usr/bin/perl > > use strict; > use XML::Twig; > > my $config_file = $ARGV[0]; > > my $xTwig = XML::Twig->new( pretty_print => 'indented' ); > > $xTwig->safe_parsefile($config_file) or die "Failure to parse XML > file"; > > my $xRoot = $xTwig->root(); > > my $xPlatformSpecific = $xRoot->first_child('platform_specific'); > > print "attribute value = ", $xPlatformSpecific->att('attribute'), > "\n"; > print "platform value = ", $xPlatformSpecific->att('platform'), "\n"; > > print $xTwig->sprint(); > > > Here is a script using XML::LibXML: > > #!/usr/bin/perl > > use XML::LibXML; > > my $config_file = $ARGV[0]; > > my $parser = XML::LibXML->new(); > > my $doc = $parser->parse_file($config_file); > > my $root = $doc->documentElement(); > > my ($xPlatformSpecific) = $root->findnodes('platform_specific'); > > print "attribute value = ", $xPlatformSpecific->getAttribute > ('attribute'), "\n"; > print "platform value = ", $xPlatformSpecific->getAttribute > ('platform'), "\n"; > > print $doc->toString(); > > > > On 6/12/07, Jim <[EMAIL PROTECTED]> wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> Hi... >> >> Here's hoping someone can come to the rescue on this issue for me. >> >> I'm having a bear of a time figuring out why XML::Simple seems to >> want to make both the attribute and child element of a specific >> element into their own elements. I'm starting to wonder if the XML >> supplied as input is illegally formatted? >> >> As can be seen in my example here, the <platform_specific> element >> has an attribute named "attribute" and another named "platform". It >> also has a child element named <platform>. As can be seen in the >> example output, the attribute="something" is properly maintained as >> an atribute to <platform_specific>, while the platform="windows" is >> being forced into becoming a child element of <platform_specific>, >> resulting in two child <platform> elements with the same value. >> >> I know that having an attribute and element of the same name and >> value is redundant, and I'm not certain if it is even legit XML (if >> not, someone let me know where I can find reference to this). The >> input is not XML I control, so I'm looking at getting the provider to >> modify it before it comes to me if their XML is illegally formatted >> or some such. >> >> My expectation is that XML::Simple would be keeping attributes where >> they started, and the contents of elements where they started. >> >> I started also trying to use XML::Smart today, and got exactly the >> same behaviour, so I'm wondering if the issue is not with the perl >> modules, but possibly with one of their dependencies (they both >> depend upon XML::Parser and xpat right?). >> >> My current script is attempting to simply read in the source xml >> file, and write out a new copy with the same xml. My ultimate goal >> is, of course, to be able to modify items within this config file, >> but I need to figure out this attribute name versus element name >> issue first. >> >> Any help anyone can provide would be GREATLY appreciated. >> >> Thanks in advance, examples are below. >> >> - - jim - >> >> >> >> - -- my input XML file looks like this -- >> >> <?xml version="1.0" encoding="utf-8" ?> >> <config> >> <platform_specific attribute="something" platform="Windows"> >> <platform>Windows</platform> >> </platform_specific> >> </config> >> >> - -- my output XML looks like this -- >> >> <?xml version="1.0" encoding="utf-8" ?> >> <config> >> <platform_specific attribute="something"> >> <platform>Windows</platform> >> <platform>Windows</platform> >> </platform_specific> >> </config> >> >> - -- the basics of my perl script look like this-- >> >> use XML::Simple ;# qw(:strict); # >> use module >> $xml = new XML::Simple; # >> create object >> $data = $xml->XMLin($configFile, >> >> KeepRoot => 1, >> >> ForceArray => 'config', >> ); # read xml file >> >> use Data::Dumper; # Using data dumper here >> is mostly useful for seeing >> print Dumper($data); # the xml struct >> we've read in while >> developing this >> >> $output = XMLout($data, >> XMLDecl => >> '<?xml version="1.0" encoding="utf-8" ?>', >> NoSort => 0, >> KeepRoot => 1, >> ); >> >> >> >> >> >> >> >> - -- the $data object ends up looking like this -- >> >> $VAR1 = { >> 'config' => [ >> { >> 'platform_specific' => [ >> { >> 'attribute' => >> 'something', >> 'platform' => [ >> >> 'Windows', >> >> 'Windows', >> >> 'Windows' >> ] >> } >> ] >> } >> ] >> }; >> >> >> >> >> - >> -------------------------------------------------------------------- >> JIm | [EMAIL PROTECTED] >> 4ABC 177B 8352 2D6B 1E10 DAE5 7865 34D5 3139 5D2D >> >> >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1.4.5 (Darwin) >> >> iD8DBQFGb01O+LYMpAC2iPgRAj43AJ4r0yZQcyB7DP4YLi4mDLJeVMhMxQCfS1DA >> Oa6fZNdAaAAIy1Dfngq0vf0= >> =9lo5 >> -----END PGP SIGNATURE----- >> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) iD8DBQFGcIyz+LYMpAC2iPgRArmBAJ4ljsCpWMiDIiZvvp6Um8rE6CF6vwCfQg+5 bKWTjJqjzQEK54skpM/Dnm8= =fFsi -----END PGP SIGNATURE-----