[Templates] Template::Plugin::XML::Writer

Addison, Mark Mark.Addison@itn.co.uk
Tue, 11 Jul 2006 14:33:03 +0100


This is a multi-part message in MIME format.

------_=_NextPart_001_01C6A4EE.8936B7FD
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello,

Attached is a plugin I'm working on that wraps XML::Writer,
synopsis below.
I was planning to submit it for inclusion in the new
Template::XML distribution, Andy are you interested? If
so do you want patches against the current version on CPAN
or is there a cvs/svn version somewhere to work against?
It still needs a proper test script and the error handling
checking, etc.

All comments welcome.

=head1 SYNOPSIS

    # Load the plugin and set writer options.
    [% xw = XML.Writer( DATA_MODE => 1, DATA_INDENT => 2 ); %]

    # Create XML document
    [%
        xw.xmlDecl;
        xw.startTag( 'website', id=>'webzone1' );
        xw.comment( 'Website description' );
        xw.startTag( 'section', name=>'alpha', title=>'The Alpha Zone'
);
        xw.dataElement( 'description', 'Hello...' );
        xw.emptyTag( 'page', href=>'/foo/bar', title=>'The Foo Page' );
        xw.emptyTag( 'page', href=>'/bar/baz', title=>'The Bar Page' );
        xw.emptyTag( 'page', href=>'/baz/qux', title=>'The Baz Page' );
        xw.endTag;
        xw.endTag;
        xw.end;
    %]

    #
    # Will produce:
    # 
    <?xml version="1.0"?>

    <website id="webzone1">
      <!-- Website description -->
      <section name="alpha" title="The Alpha Zone">
        <description>Hello...</description>
        <page href="/foo/bar" title="The Foo Page"/>
        <page href="/bar/baz" title="The Bar Page"/>
        <page href="/baz/qux" title="The Baz Page"/>
      </section>
    </website>

cheers,
mark
--
"In the beginning, there was nothing, which exploded."
 





MARK ADDISON
WEB DEVELOPER

200 GRAY'S INN ROAD
LONDON
WC1X 8XZ
UNITED KINGDOM
T +44 (0)20 7430 4678
F 
E MARK.ADDISON@ITN.CO.UK
WWW.ITN.CO.UK
Please Note:

 

Any views or opinions are solely those of the author and do not necessarily represent 
those of Independent Television News Limited unless specifically stated. 
This email and any files attached are confidential and intended solely for the use of the individual
or entity to which they are addressed. 
If you have received this email in error, please notify postmaster@itn.co.uk 

Please note that to ensure regulatory compliance and for the protection of our clients and business,
we may monitor and read messages sent to and from our systems.

Thank You.


------_=_NextPart_001_01C6A4EE.8936B7FD
Content-Type: application/octet-stream;
	name="Writer.pm"
Content-Transfer-Encoding: base64
Content-Description: Writer.pm
Content-Disposition: attachment;
	filename="Writer.pm"

cGFja2FnZSBUZW1wbGF0ZTo6UGx1Z2luOjpYTUw6OldyaXRlcjsKCnVzZSBzdHJpY3Q7CnVzZSBi
YXNlIHF3KFRlbXBsYXRlOjpQbHVnaW4gWE1MOjpXcml0ZXIpOwp1c2UgWE1MOjpXcml0ZXI7Cgpv
dXIgJFZFUlNJT04gPSAwLjE7CgpzdWIgbmV3IHsKICAgIG15ICRjbGFzcyAgID0gc2hpZnQ7CiAg
ICBteSAkY29udGV4dCA9IHNoaWZ0OwogICAgbXkgJHBhcmFtcyAgPSBzaGlmdCB8fCB7fTsKCiAg
ICBteSAkb3V0OwogICAgbXkgJHdyaXRlciA9IFhNTDo6V3JpdGVyLT5uZXcoCiAgICAgICAgJSRw
YXJhbXMsCiAgICAgICAgT1VUUFVUID0+IFwkb3V0LAogICAgKTsKICAgIHJldHVybiBibGVzcyAk
d3JpdGVyLCAkY2xhc3M7Cn0KCiMgUmV0dXJuIG91dHB1dCAoc2V0IHRvIHNjYWxhciByZWYgaW4g
bmV3KSBhbmQgZW1wdHkgaXQuCnN1YiBfZW1wdHlfb3V0cHV0IHsKICAgIG15ICRtZSA9IHNoaWZ0
OwogICAgbXkgJHhtbF9vdXQgPSAkbWUtPmdldE91dHB1dDsKICAgIG15ICRvdXQgPSAkJHhtbF9v
dXQ7CiAgICAkJHhtbF9vdXQgPSAiIjsKICAgIHJldHVybiAkb3V0Owp9CgpzdWIgZW5kIHsKICAg
IG15ICRtZSA9IHNoaWZ0OwogICAgJG1lLT5TVVBFUjo6ZW5kKEBfKTsKICAgIHJldHVybiAkbWUt
Pl9lbXB0eV9vdXRwdXQ7Cn0KCnN1YiB4bWxEZWNsIHsKICAgIG15ICRtZSA9IHNoaWZ0OwogICAg
JG1lLT5TVVBFUjo6eG1sRGVjbChAXyk7CiAgICByZXR1cm4gJG1lLT5fZW1wdHlfb3V0cHV0Owp9
CgpzdWIgZG9jdHlwZSB7CiAgICBteSAkbWUgPSBzaGlmdDsKICAgICRtZS0+U1VQRVI6OmRvY3R5
cGUoQF8pOwogICAgcmV0dXJuICRtZS0+X2VtcHR5X291dHB1dDsKfQoKc3ViIGNvbW1lbnQgewog
ICAgbXkgJG1lID0gc2hpZnQ7CiAgICAkbWUtPlNVUEVSOjpjb21tZW50KEBfKTsKICAgIHJldHVy
biAkbWUtPl9lbXB0eV9vdXRwdXQ7Cn0KCnN1YiBwaSB7CiAgICBteSAkbWUgPSBzaGlmdDsKICAg
ICRtZS0+U1VQRVI6OnBpKEBfKTsKICAgIHJldHVybiAkbWUtPl9lbXB0eV9vdXRwdXQ7Cn0KCnN1
YiBzdGFydFRhZyB7CiAgICBteSAkbWUgPSBzaGlmdDsKICAgIG15ICgkbmFtZSwkYXR0cikgPSBA
XzsKICAgICRtZS0+U1VQRVI6OnN0YXJ0VGFnKCAkbmFtZSwgJSRhdHRyICk7CiAgICByZXR1cm4g
JG1lLT5fZW1wdHlfb3V0cHV0Owp9CgpzdWIgZW1wdHlUYWcgewogICAgbXkgJG1lID0gc2hpZnQ7
CiAgICBteSAoJG5hbWUsICRhdHRyKSA9IEBfOwogICAgJG1lLT5TVVBFUjo6ZW1wdHlUYWcoICRu
YW1lLCAlJGF0dHIgKTsKICAgIHJldHVybiAkbWUtPl9lbXB0eV9vdXRwdXQ7Cn0KCnN1YiBlbmRU
YWcgewogICAgbXkgJG1lID0gc2hpZnQ7CiAgICAkbWUtPlNVUEVSOjplbmRUYWcoIEBfICk7CiAg
ICByZXR1cm4gJG1lLT5fZW1wdHlfb3V0cHV0Owp9CgojIFdlIGNhbid0IG92ZXJyaWRlIGxpa2Ug
dGhlIG90aGVycyBhcyBlYWNoIG9mIHRoZSBpbnRlcm5hbAojIGNhbGxzIHRvIHdyaXRlciBtZXRo
b2RzIGVtcHRpZXMgdGhlIG91dHB1dCBhbmQgd2Ugc2VlIG5vdGhpbmcuCnN1YiBkYXRhRWxlbWVu
dCB7CiAgICBteSAoJG1lLCAkbmFtZSwgJGRhdGEsICRhdHRzKSA9IChAXyk7CiAgICAkbWUtPlNV
UEVSOjpzdGFydFRhZygkbmFtZSwgJSRhdHRzKTsKICAgICRtZS0+U1VQRVI6OmNoYXJhY3RlcnMo
JGRhdGEpOwogICAgJG1lLT5TVVBFUjo6ZW5kVGFnKCRuYW1lKTsKICAgIHJldHVybiAkbWUtPl9l
bXB0eV9vdXRwdXQ7Cn0KCnN1YiBjaGFyYWN0ZXJzIHsKICAgIG15ICRtZSA9IHNoaWZ0OwogICAg
JG1lLT5TVVBFUjo6Y2hhcmFjdGVycyhAXyk7CiAgICByZXR1cm4gJG1lLT5fZW1wdHlfb3V0cHV0
Owp9CgpzdWIgcmF3IHsKICAgIG15ICRtZSA9IHNoaWZ0OwogICAgJG1lLT5TVVBFUjo6cmF3KEBf
KTsKICAgIHJldHVybiAkbWUtPl9lbXB0eV9vdXRwdXQ7Cn0KCnN1YiBjZGF0YSB7CiAgICBteSAk
bWUgPSBzaGlmdDsKICAgICRtZS0+U1VQRVI6OmNkYXRhKEBfKTsKICAgIHJldHVybiAkbWUtPl9l
bXB0eV9vdXRwdXQ7Cn0KCnN1YiBjZGF0YUVsZW1lbnQgewogICAgbXkgKCRtZSwgJG5hbWUsICRk
YXRhLCAkYXR0cykgPSAoQF8pOwogICAgJG1lLT5TVVBFUjo6c3RhcnRUYWcoJG5hbWUsICUkYXR0
cyk7CiAgICAkbWUtPlNVUEVSOjpjZGF0YSgkZGF0YSk7CiAgICAkbWUtPlNVUEVSOjplbmRUYWco
JG5hbWUpOwogICAgcmV0dXJuICRtZS0+X2VtcHR5X291dHB1dDsKfQoKMTsKCl9fRU5EX18KCj1w
b2QKCj1oZWFkMSBOQU1FCgpUZW1wbGF0ZTo6UGx1Z2luOjpYTUw6OldyaXRlciAtIFBsdWdpbiBp
bnRlcmZhY2UgdG8gWE1MOjpXcml0ZXIuCgo9aGVhZDEgU1lOT1BTSVMKCiAgICAjIExvYWQgdGhl
IHBsdWdpbiBhbmQgc2V0IHdyaXRlciBvcHRpb25zLgogICAgWyUgeHcgPSBYTUwuV3JpdGVyKCBE
QVRBX01PREUgPT4gMSwgREFUQV9JTkRFTlQgPT4gMiApOyAlXQoKICAgICMgQ3JlYXRlIFhNTCBk
b2N1bWVudAogICAgWyUKICAgICAgICB4dy54bWxEZWNsOwogICAgICAgIHh3LnN0YXJ0VGFnKCAn
d2Vic2l0ZScsIGlkPT4nd2Viem9uZTEnICk7CiAgICAgICAgeHcuY29tbWVudCggJ1dlYnNpdGUg
ZGVzY3JpcHRpb24nICk7CiAgICAgICAgeHcuc3RhcnRUYWcoICdzZWN0aW9uJywgbmFtZT0+J2Fs
cGhhJywgdGl0bGU9PidUaGUgQWxwaGEgWm9uZScgKTsKICAgICAgICB4dy5kYXRhRWxlbWVudCgg
J2Rlc2NyaXB0aW9uJywgJ0hlbGxvLi4uJyApOwogICAgICAgIHh3LmVtcHR5VGFnKCAncGFnZScs
IGhyZWY9PicvZm9vL2JhcicsIHRpdGxlPT4nVGhlIEZvbyBQYWdlJyApOwogICAgICAgIHh3LmVt
cHR5VGFnKCAncGFnZScsIGhyZWY9PicvYmFyL2JheicsIHRpdGxlPT4nVGhlIEJhciBQYWdlJyAp
OwogICAgICAgIHh3LmVtcHR5VGFnKCAncGFnZScsIGhyZWY9PicvYmF6L3F1eCcsIHRpdGxlPT4n
VGhlIEJheiBQYWdlJyApOwogICAgICAgIHh3LmVuZFRhZzsKICAgICAgICB4dy5lbmRUYWc7CiAg
ICAgICAgeHcuZW5kOwogICAgJV0KCiAgICAjCiAgICAjIFdpbGwgcHJvZHVjZToKICAgICMgCiAg
ICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KCiAgICA8d2Vic2l0ZSBpZD0id2Viem9uZTEiPgogICAg
ICA8IS0tIFdlYnNpdGUgZGVzY3JpcHRpb24gLS0+CiAgICAgIDxzZWN0aW9uIG5hbWU9ImFscGhh
IiB0aXRsZT0iVGhlIEFscGhhIFpvbmUiPgogICAgICAgIDxkZXNjcmlwdGlvbj5IZWxsby4uLjwv
ZGVzY3JpcHRpb24+CiAgICAgICAgPHBhZ2UgaHJlZj0iL2Zvby9iYXIiIHRpdGxlPSJUaGUgRm9v
IFBhZ2UiLz4KICAgICAgICA8cGFnZSBocmVmPSIvYmFyL2JheiIgdGl0bGU9IlRoZSBCYXIgUGFn
ZSIvPgogICAgICAgIDxwYWdlIGhyZWY9Ii9iYXovcXV4IiB0aXRsZT0iVGhlIEJheiBQYWdlIi8+
CiAgICAgIDwvc2VjdGlvbj4KICAgIDwvd2Vic2l0ZT4KCj1oZWFkMSBERVNDUklQVElPTgoKQSBU
ZW1wbGF0ZSBpbnRlcmZhY2UgdG8gRGF2aWQgTWVnZ2luc29uJ3MgZXhjZWxsZW50IEw8WE1MOjpX

cml0ZXI+IG1vZHVsZS4KClRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhbGwgdGhlIG9wdGlvbnMgc3Vw
cG9ydGVkIGJ5IFhNTDo6V3JpdGVyIGFwYXJ0IGZyb20KQzxPVVRQVVQ+LCB3aGljaCBpcyBzZXR1
cCBzbyB0aGF0IGFsbCB0aGUgd3JpdGluZyBtZXRob2RzIG91dHB1dCBkaXJlY3RseSBpbnRvCnRo
ZSB0ZW1wbGF0ZS4KCkJ5IGRlZmF1bHQgdGhlIHBsdWdpbiB3aWxsIGRvIHVzZWZ1bGwgd2VsbC1m
b3JtZWRuZXNzIGNoZWNrcyBvbiB0aGUgWE1MCmdlbmVyYXRlZCB2aWEgdGhlIHBsdWdpbiwgYnV0
IGl0IGRvZXMgbm90IG5vdGljZSBhbnkgWE1MIChvciBhbnl0aGluZyBlbHNlKSB5b3UKZ2VuZXJh
dGUgdXNpbmcgbm9ybWFsIHRlbXBsYXRlIGRpcmVjdGl2ZXMuIFNldCB0aGUgVU5TQUZFIG9wdGlv
biB3aGVuIGNyZWF0aW5nCnRoZSB3cml0ZXIgdG8gdHVybiB0aGVzZSBjaGVja3Mgb2ZmIHNvIHlv
dSBjYW4gbWl4IG91dHB1dCB3aXRob3V0IHRoZSBjaGVja3MKZ2V0dGluZyBpbiB0aGUgd2F5LgoK
WW91IGFsc28gaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZSBYTUw6OldyaXRlciBtZXRob2RzLCBzdWNo
IGFzIHRoZSBxdWVyeWluZwptZXRob2RzLCBidXQgYWdhaW4gdGhlc2Ugb25seSBhcHBseSB0byBY
TUwgYWRkZWQgdmlhIHRoZSBwbHVnaW4uCgo9aGVhZDEgQVVUSE9SUwoKVGhpcyBwbHVnaW4gd3Jp
dHRlbiBieSBNYXJrIEFkZGlzb24uCgpUaGUgWE1MOjpXcml0ZXIgbW9kdWxlIGJ5IERhdmlkIE1l
Z2dpbnNvbi4KCj1oZWFkMSBTRUUgQUxTTwoKTDxUZW1wbGF0ZT4sIEw8VGVtcGxhdGU6OlBsdWdp
bj4sIEw8WE1MOjpXcml0ZXI+LgoKPWVuZAo=

------_=_NextPart_001_01C6A4EE.8936B7FD--