Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

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

by tobias_hofer (Friar)
on Jun 14, 2013 at 10:45 UTC ( #1038941=note: print w/replies, xml ) Need Help??

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

I cannot switch to XML::Rules.. i need to get this done by XML::Simple..
I wonder why this attribute and value stuff is working in all xml-tags but this 'LONG-NAME' tag..
  • Comment on Re: XML::Simple how do i keep the same xml format (Values and Attributs)?

Replies are listed 'Best First'.
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

    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
      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!!
Re^2: XML::Simple how do i keep the same xml format (Values and Attributs)?
by Jenda (Abbot) on Jun 14, 2013 at 13:52 UTC

    XML::Rules is a single .pm file and its only non-core dependency is XML::Parser which you most probably already have so if you can create/upload your script, you can "install"/upload XML::Rules. No compilation or configuration required, you just need to put the into a directory named XML in one of the directories listed by perl -e "print join qq{\n}, @INC".

    Yes, even you can use CPAN

    Enoch was right!
    Enjoy the last years of Rome.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1038941]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (11)
As of 2018-06-20 09:55 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.