Apache2-ModXml2

 view release on metacpan or  search on metacpan

examples/TestXML2.pm  view on Meta::CPAN

        } else {
          $filter->r->log->error("No node in bucket data:".$b->data);
        }
      }

    }

    my $rv = $filter->next->pass_brigade($bb);
    return $rv unless $rv == APR::Const::SUCCESS();

    return APR::Const::SUCCESS();
}

#
# HTML/SXPATH
# 
sub init_html : FilterInitHandler {
    my($filter) = @_;

    $filter->r->log->debug("HTML handler will be initialised.");
    return AMX2::xpath_filter_init($filter, 
                                   './/a', undef, 
                                   get_transform($filter->r));
}

sub handler_html : FilterHasInitHandler(\&init_html) {
    my($filter, $bb) = @_;

    if (!$filter->ctx) {
        init_html($filter);
    }

    $filter->r->log->debug("HTML handler called.");
    return AMX2::xpath_filter($filter, $bb);
}

sub get_transform
{
  my ($r) = @_;
  return sub {
        my($tree) = @_;
    
        $r->log->debug("Tree: ".$tree->toString());

        #return APR::Const::SUCCESS();
    
        my $doc = $tree->ownerDocument;
        my $frag = $tree->parentNode;
        my $xpc = XML::LibXML::XPathContext->new($frag);
        $r->log->debug("XPathContext created.");
        my @tags = $xpc->findnodes(q|.//*[@tag='param']|);    

        $r->log->debug(scalar(@tags)." parameter tags found.");
        
        $tree->addChild($doc->createComment("mod_xml2"));

        my @params = ();
        foreach my $tag (@tags) {
            push(@params, $tag->getAttribute( 'name' ));
            push(@params, $tag->textContent());
            $tag->unbindNode();
        }
    
        my $uri = URI->new($tree->getAttribute('href'));
        $uri->query_form(@params);
        $r->log->debug("Setting new href ".$uri.".");
        $tree->setAttribute('href', $uri);

        $r->log->debug("transform is done.");    
        return APR::Const::SUCCESS();
    };
}


#
# OSM/SXPATH
# 
sub init_osm : FilterInitHandler {
    my($filter) = @_;

    $filter->r->log->debug("OSM handler will be initialised.");
    return AMX2::xpath_filter_init($filter, 
                                   './/node', undef, 
                                   get_osm_transform($filter->r));
}

sub handler_osm : FilterHasInitHandler(\&init_osm) {
    my($filter, $bb) = @_;
    $filter->r->log->debug("OSM handler called.");

    if (!$filter->ctx) {
        init_osm($filter);
        $filter->ctx(1);
    }

    return AMX2::xpath_filter($filter, $bb);
}

sub get_osm_transform
{
  my ($r) = @_;
  return sub {
        my($frag) = @_;
   
        $r->log->debug("Tree: ".$frag->toString());
        my $tree = $frag->firstChild;        
        return unless ($tree);

        #return APR::Const::SUCCESS();
    
        my $doc = $frag->ownerDocument;
        $r->log->debug("XPathContext will be created.");
        my $xpc = XML::LibXML::XPathContext->new($frag);
        $r->log->debug("XPathContext created.");
        # check if the node is a gas station.
        my @tags = $xpc->findnodes(q|.//tag[@k='amenity'][@v='fuel']|);    

        $r->log->debug(scalar(@tags)." fuel tags found.");

        if (!@tags) {
          # We remove the whole tree.



( run in 1.611 second using v1.01-cache-2.11-cpan-2398b32b56e )