NAME
XML::Flow - Store (restore) perl data structures in XML stream.
SYNOPSIS
#read - write by imported functions ref2xml() and xml2ref()
my
$data
= {
1
=>2,
4
=>[1,2,3]};
my
$xml_string
= ref2xml(
$data
);
my
$data_restored
= xml2ref(
$xml_string
);
my
$ref1
= xml2ref(\
*DATA
);
#from embedded __DATA__
#Write XML
use
XML::Flow;
my
$wr
= new XML::Flow::
"test.xml"
;
$wr
->startTag(
"Root"
);
#start root tag
$wr
->startTag(
"Data"
);
$wr
->
write
({
1
=>2},[4..6]);
$wr
->closeTag(
"Data"
);
$wr
->closeTag(
"Root"
);
$wr
->
close
;
#Read
my
$fs
= new IO::File::
"<test.xml"
;
my
$rd
= new XML::Flow::
$fs
;
my
%tags
= (
Root
=>
undef
,
Data
=>
sub
{
Dumper(\
@_
) },
);
$rd
->
read
(\
%tags
);
$fs
->
close
;
DESCRIPTION
Easy store and restore perl data structures. It use XML::Parser for read and XML::Writer for write xml.
FUNCTIONS
ref2xml( $ref )
Serilize reference to XML string. Where $ref is reference to SCALAR, HASH or ARRAY. This function will return XML string.
The above example would print out the message:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<XML-FLow-Data>
<flow_data_struct>
<value type=
"hashref"
>
<key name=
"4"
>
<value type=
"arrayref"
>
<key name=
"1"
>2</key>
<key name=
"0"
>1</key>
<key name=
"2"
>3</key>
</value>
</key>
<key name=
"1"
>2</key>
</value>
</flow_data_struct>
</XML-FLow-Data>
xml2ref($string || reference to GLOB)
This function will deserilize string generated by ref2xml.Return reference. For example:
use
Data::Dumper;
my
$testxml
=
q{<?xml version="1.0" encoding="UTF-8"?>
<XML-FLow-Data>
<flow_data_struct>
<value type="hashref">
<key name="4">
<value type="arrayref">
<key name="1">2</key>
<key name="0">1</key>
<key name="2">3</key>
</value>
</key>
<key name="1">2</key>
</value>
</flow_data_struct>
</XML-FLow-Data>}
;
Dumper(xml2ref(
$testxml
))
will print:
$VAR1
= {
'1'
=>
'2'
,
'4'
=> [
'1'
,
'2'
,
'3'
]
};
METHODS
new($filehandle|$filename| a reference to a text string )
Create a new XML::Flow object. The first parameter should either be a string containing filename, a reference to a text string or it should be an open IO::Handle. For example:
my
$wr
= new XML::Flow::
"test.xml"
;
or
my
$rd
= new XML::Flow:: \
$string_with_xml
;
or
my
$fs
= new IO::File::
"<test.xml"
;
my
$rd
= new XML::Flow::
$fs
;
or
my
$fz
= IO::Zlib->new(
$file
,
"wb9"
);
my
$wr
= new XML::Flow::
$fz
;
or
my
$string_for_write_xml
;
my
$wr
= new XML::Flow:: \
$string_buffer_for_write_xml
;
startTag($name [, $aname1 => $value1, ...])
Add a start tag to an XML document. This method is wraper for XML::Writer::startTag.
endTag([$name])
Add a end tag to an XML document. This method is wraper for XML::Writer::endTag.
write($ref1[, $ref2, ...])
Serilize references to XML. Where $ref is reference to SCALAR, HASH or ARRAY. This method used only for write XML mode.
$wr
->
write
({
1
=>2},[4..6]);
my
$a
=
"1"
;
$wr
->
write
(\
$a
);
read({tag1=>sub1{}[, tag2=>\&sub2 })
Run XML parser. Argument is a reference to hash with tag => handler. If handler eq undef, then tag ignore. If subroutine return non undef result, it passed to parent tag handler. Handler called with args: ( {hash of attributes}, <reference to data> [,<reference to data>] ). For example:
Source xml :
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<Root>
<Obj>
<Also>
<flow_data_struct>
<value type=
"scalarref"
>
<key name=
"scalar"
>3</key>
</value>
</flow_data_struct>
<flow_data_struct>
<value type=
"hashref"
>
<key name=
"1"
value=
"undef"
></key>
</value>
</flow_data_struct>
</Also>
</Obj>
</Root>
Read code:
my
$rd
= new XML::Flow::
"test.xml"
;
my
%tags
= (
Root
=>
undef
,
Obj
=>
sub
{
Dumper(\
@_
) },
Also
=>
sub
{
shift
;
#reference to hash of attributes
return
@_
},
);
$rd
->
read
(\
%tags
);
$rd
->
close
;
Output:
$VAR1
= [
{},
#reference to hash of xml tag attributes
\
'3'
,
{
'1'
=>
undef
}
];
close()
Close all handlers (including internal).
SEE ALSO
XML::Parser, XML::Writer
AUTHOR
Zahatski Aliaksandr, <zag@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2006-2010 by Zahatski Aliaksandr
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.