/[cvs]/nfo/perl/libs/Data/Storage/Handler/XML.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Data/Storage/Handler/XML.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Fri Feb 21 07:58:48 2003 UTC (21 years, 4 months ago) by joko
Branch: MAIN
Changes since 1.1: +11 -3 lines
enhanced error detection

1 joko 1.1 ## ------------------------------------------------------------------------
2 joko 1.2 ## $Id: XML.pm,v 1.1 2003/02/20 20:20:54 joko Exp $
3 joko 1.1 ## ------------------------------------------------------------------------
4 joko 1.2 ## $Log: XML.pm,v $
5     ## Revision 1.1 2003/02/20 20:20:54 joko
6     ## + initial commit
7     ##
8 joko 1.1 ## ------------------------------------------------------------------------
9    
10    
11     package Data::Storage::Handler::XML;
12    
13     use strict;
14     use warnings;
15    
16     use base qw(
17     DesignPattern::Object
18     DesignPattern::Logger
19     );
20    
21    
22     use Data::Dumper;
23     #use Data::Storage::Handler::File::Basic qw( s2f a2f f2s );
24     use XML::Simple;
25     use XML::Parser;
26     use XML::Parser::EasyTree;
27     use XML::XPath;
28    
29    
30     sub sendQuery {
31     my $self = shift;
32     my $xpq = shift;
33     my $options = shift;
34    
35 joko 1.2 $self->log( "xpq='$xpq'", 'debug' );
36 joko 1.1
37     # trace
38     #print Dumper($self);
39     #exit;
40    
41     my $file = $self->{filename};
42 joko 1.2
43     if (!$file) {
44     $self->log("No filename given.", 'error');
45     return;
46     }
47 joko 1.1
48     if (! -e $file) {
49     $self->log("File not found: '$file'.", 'error');
50     return;
51     }
52    
53     #print "file: $file", "\n";
54     #print "xpq: $xpq", "\n";
55    
56     # filter nodes by xpath-query
57     my $xp = XML::XPath->new( filename => $file );
58     my $nodeset = $xp->find($xpq);
59    
60     # build result xml
61     my $buffer;
62     foreach my $node ($nodeset->get_nodelist) {
63     $buffer .= XML::XPath::XMLParser::as_string($node) . "\n\n";
64     }
65     #$buffer .= '';
66     #$buffer = "<result>$buffer</result>";
67    
68     # trace
69     #print $buffer, "\n";
70     #exit;
71    
72     $self->{buffer} = $buffer;
73    
74     }
75    
76     sub getResult {
77     my $self = shift;
78     return $self->{buffer};
79     }
80    
81     sub circumflex {
82     my $self = shift;
83     my $tag = shift;
84     # mungle result payload
85     $self->{buffer} = "<$tag>" . $self->{buffer} . "</$tag>" if $self->{buffer};
86     }
87    
88     sub isEmpty {
89     my $self = shift;
90     return not defined $self->{buffer};
91     }
92    
93     sub toEasyTree {
94     my $self = shift;
95    
96     $XML::Parser::EasyTree::Noempty = 1;
97    
98     # convert xml data to native perl data structure
99     #my $parser = XML::Parser->new( Style => 'EasyTree', Handlers => { Char => sub { my $char = shift; print "char: ", Dumper($char), "\n"; } } );
100     #my $parser = XML::Parser->new( Style => 'EasyTree', Handlers => { Char => sub {} } );
101     my $parser = XML::Parser->new( Style => 'EasyTree' );
102     my $data = $parser->parse($self->{buffer});
103    
104     # trace
105     #print Dumper($data);
106     #exit;
107    
108     # FIXME!?
109     my $hash = $data->[0];
110    
111     # trace
112     #print Dumper($hash);
113     #exit;
114    
115     #$self->{payload} = $hash;
116     return $hash;
117    
118     }
119    
120     sub toSimpleTree {
121     my $self = shift;
122     #print $self->{buffer};
123     #exit;
124     #$self->{payload} = XMLin($self->{buffer});
125     return XMLin($self->{buffer});
126     }
127    
128    
129     1;
130     __END__

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed