-----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-----

Reply via email to