Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
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)?
Replies are listed 'Best First'.
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 musing on the Monastery: (7)
As of 2015-07-29 02:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (260 votes), past polls