A cute little query language for converting XML to Perl
Perl
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
CuteQueries
contrib
lib/XML
t
.gitignore
.perlcriticrc
.todo
Changes
CuteQueries.pm
MANIFEST
MANIFEST.SKIP
Makefile.PL
README
bad.xml
ddo.xml
example.xml
example2.xml
example3.xml
example4.xml

README

# This module produces results rather like L<XML::Simple>, but
# without the ambiguity problems inherent in going from XML to
# Perl.

use strict;
use warnings;
use XML::CuteQueries;

my $CQ = XML::CuteQueries->new;
   $CQ->parse(<<"EOXML");

<root>
    <result>OK</result>
    <data>
        <row><f1> 7</f1><f2>11</f2><f3>13</f3></row>
        <row><f1>17</f1><f2>19</f2><f3>23</f3></row>
        <row><f1>29</f1><f2>31</f2><f3>37</f3></row>
    </data>
</root>

EOXML

my $arrayref_of_hashrefs = $CQ->cute_query(
    # the top level query is for the <data> elements
    # the shape of the only top level query is [],
    # so it returns one [] -- for the one <data> element

    "data" => [

        # the contents of the top level [] is a sub query for row elements.
        # Each row element should be a hashref, so the data-[] will contain
        # three row-{} hashrefs

        row => {

            # the contents of those hashrefs is a subquery for any tag found
            # there.  The tag names are preserved as keys because we're
            # sitting in the context of a hashref.
            # the shape of each match result is '', so it just returns the
            # contents of each tag as a string.

            '*' => '',
        }
    ],
);

# [ {f1=> 7, f2=>11, f3=>13},
#   {f1=>17, f2=>19, f3=>23},
#   {f1=>29, f2=>31, f3=>37}, ]