Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^3: XML compare with a key

by hdb (Monsignor)
on Apr 02, 2019 at 12:42 UTC ( #1232003=note: print w/replies, xml ) Need Help??


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

I am getting tired by being pointed to this comment each and every time. For such simple stuff the module is still useful.

And anyways, the OP will reply that (s)he does not want to install any module, see earlier questions... Re^4: XML file difference highlights

Replies are listed 'Best First'.
Re^4: XML compare with a key
by haukex (Bishop) on Apr 02, 2019 at 12:49 UTC
    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" } }

      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.

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

Re^4: XML compare with a key
by Jenda (Abbot) on Apr 02, 2019 at 22:22 UTC

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2021-04-14 07:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?