in reply to Re: xpath problem using XML::LibXML
in thread xpath problem using XML::LibXML

Thank you Ken for the pointers to the docs. Your assessment of my trying variations is close; I'm a slow learner, new to xml (and not strong on perl), and was getting desperate. That documentation will be my friend for the remaining tasks!

Fwiw the change of quoting you suggested doesn't actually fix my mistake. My error was misunderstanding of the result that xpath '//matrix/vm@type="br"' matches, so as pointed out in the comment above I was wrongly adding an extra 'vm' child level in findvalue("./vm/release/\@version").

Replies are listed 'Best First'.
Re^3: xpath problem using XML::LibXML
by kcott (Archbishop) on Apr 12, 2014 at 23:04 UTC
    "Fwiw the change of quoting you suggested doesn't actually fix my mistake."

    My apologies if the change in quoting was misinterpreted as part of the fix.

    The change from //vm to //matrix/vm was the fix.

    You had multiple instances of \' and \@ (within double-quoted strings) throughout your post: the quoting change was a cure for backslashitis. :-)

    Here's the test I ran prior to posting:

    #!/usr/bin/env perl -l use strict; use warnings; use XML::LibXML; my $file = 'pm_1082058_n4000-small.xml'; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($file); for my $vm ($doc->findnodes('//matrix/vm[@type="br"]')) { my $version = $vm->findvalue('./release/@version'); print 'Version: ', $version; print 'Wanted: ', $vm->findvalue('./release/@wanted'); if ($version eq '7.2.1') { print 'Found!'; last; } }

    Output:

    Version: 7.2.2 Wanted: Version: 7.2.1 Wanted: YES Found!

    As you can see, there's no backslashes here at all (which I find makes the code more readable). The '//matrix/vm[@type="br"]' solution which I posted in my original reply was copied directly from that. If you want to run that test (or modifiy it for other tests), the data I used (pm_1082058_n4000-small.xml) is in the spoiler below.

    -- Ken

      Ah, thanks, understood. Yes, the de-backslashed code is much easier to grasp. And thank you for pointing the xpath element fix.