Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^4: XML compare with a key

by haukex (Bishop)
on Apr 02, 2019 at 12:49 UTC ( #1232004=note: print w/replies, xml ) Need Help??


in reply to Re^3: XML compare with a key
in thread XML compare with a key

For such simple stuff the module is still useful.

I agree that the module can still be used for very simple cases, like reading simple config files in a known format (Update: although there are better modules available, such as XML::Rules). However, we don't know if the OP's actual XML really is as simple as the example shown in the root node, therefore whether it will work at all (see code below), and you also didn't mention any of the major caveats associated with that module, which is why I posted my comment.

use warnings; use strict; use Data::Dump; use XML::Simple qw/:strict XMLin/; dd XMLin('<root><x><y>Foo</y></x></root>',ForceArray=>[],KeyAttr=>[]); dd XMLin('<root><x y="Foo"></x></root>', ForceArray=>[],KeyAttr=>[]); __END__ { x => { y => "Foo" } } { x => { y => "Foo" } }

Replies are listed 'Best First'.
Re^5: XML compare with a key
by hdb (Monsignor) on Apr 02, 2019 at 12:53 UTC

    I am looking forward to your answer to the OP's question based on XML::Rules. In the meantime, I will see whether I can get it installed, a simple cpan install XML::Rules failed on my machine.

      I am looking forward to your answer to the OP's question based on XML::Rules.

      I've posted about XML::Rules as a replacement for XML::Simple before: Re: What is correct way to reference?, Re^2: hashref with(out) arrays. The following at least generates a consistent Perl data structure, and can be adapted as needed.

      use warnings; use strict; use XML::Rules; use Data::Dump; my $parser = XML::Rules->new( stripspaces => 3|4, rules => [ _default => 'raw' ], ); dd $parser->parse(<<'ENDXML'); <xmltop> <xmlbody> <tag1>jdjdjdjd</tag1> <tag2>dkdkkd</tag2> </xmlbody> </xmltop> ENDXML __END__ [ "xmltop", { _content => [ [ "xmlbody", { _content => [ ["tag1", { _content => "jdjdjdjd" }], ["tag2", { _content => "dkdkkd" }], ], }, ], ], }, ]

      Update: One possible caveat here is that if an XML element has an attribute _content, then its value will be prepended to the node's text content.

        That is a useful script to keep in the library. Many thanks!

      You want cpan XML::Rules or cpan -i XML::Rules. While harmless, cpan install XML::Rules installs both install and XML::Rules.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2021-06-16 01:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What does the "s" stand for in "perls"? (Whence perls)












    Results (74 votes). Check out past polls.

    Notices?