Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: XML::Simple how do i keep the same xml format (Values and Attributs)?

by tobyink (Abbot)
on Jun 14, 2013 at 11:17 UTC ( #1038946=note: print w/ replies, xml ) Need Help??


in reply to Re: XML::Simple how do i keep the same xml format (Values and Attributs)?
in thread XML::Simple how do i keep the same xml format (Values and Attributs)?

Then you are stuck between a rock and a hard place. You don't want to switch away from XML::Simple, yet the author of XML::Simple freely admits that it's not suitable for the sort of task you're describing and recommends other modules instead. Quotes from the documentation:

"XML::Simple is able to present a simple API because it makes some assumptions on your behalf. These include:

  • [...]
  • "You don't want fine-grained control of the formatting of generated XML
  • [...]

"In a serious XML project, you'll probably outgrow these assumptions fairly quickly.

[...]

"For event based parsing, use SAX (do not set out to write any new code for XML::Parser's handler API - it is obselete).

"For tree-based parsing, you could choose between the 'Perlish' approach of XML::Twig and more standards based DOM implementations - preferably one with XPath support such as XML::LibXML."

Personally I use XML::LibXML for virtually any XML-handling task that's thrown my way, and am rarely disappointed by it.

package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name


Comment on Re^2: XML::Simple how do i keep the same xml format (Values and Attributs)?
Re^3: XML::Simple how do i keep the same xml format (Values and Attributs)?
by tobias_hofer (Friar) on Jun 14, 2013 at 12:08 UTC
    Yes, you are right..
    If I am lucky I can convince people installing this package so I can switch to it. Thanks a lot!

    However, I have found a solution :-))

    XML Simple puts nearly every hash as an XML-attribute. But not if its pointing to another hash, example
    :
    $tdata->{'TABLE-CAPTION'} = {'ID' => $_id, 'LONG-NAME' => {content => +'Test results'}};
    Using content will create another XML-tag and not an attribute. But for using this I had to configure XML-Simple like this.
    my $xmlParser = new XML::Simple( RootName => 'TABLE', KeepRoot=>1, ValueAttr=>{ 'TABLE-CAPTION' => 'ID', 'ContentKey' => 'content', }
    Now its working fine, look at this: ^^
    P>Testresults:</P><TABLE> <TABLE-CAPTION ID="ID42.401123046875"> <LONG-NAME>Testresults</LONG-NAME> </TABLE-CAPTION> <TGROUP COLS="4"> <COLSPEC COLNAME="test-id" COLNUM="0" COLWIDTH="1.00*" /> <COLSPEC COLNAME="status" COLNUM="1" COLWIDTH="1.00*" /> <COLSPEC COLNAME="test-spec" COLNUM="2" COLWIDTH="1.00*" /> <COLSPEC COLNAME="requirement-ids" COLNUM="3" COLWIDTH="1.00*" /> <TBODY> <ROW> <ENTRY COLNAME="test-id"> ...

    Thank you very much for all your hints and tips!

    Best regards!!
    Tobias

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1038946]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2014-09-19 03:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (129 votes), past polls