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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show 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 ## ------------------------------------------------------------------------
2 ## $Id: XML.pm,v 1.1 2003/02/20 20:20:54 joko Exp $
3 ## ------------------------------------------------------------------------
4 ## $Log: XML.pm,v $
5 ## Revision 1.1 2003/02/20 20:20:54 joko
6 ## + initial commit
7 ##
8 ## ------------------------------------------------------------------------
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 $self->log( "xpq='$xpq'", 'debug' );
36
37 # trace
38 #print Dumper($self);
39 #exit;
40
41 my $file = $self->{filename};
42
43 if (!$file) {
44 $self->log("No filename given.", 'error');
45 return;
46 }
47
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