Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/perigrin/xml-toolkit
Framework for Marshaling XML to Perl (moose) Classes and back.
https://github.com/perigrin/xml-toolkit
Last synced: 22 days ago
JSON representation
Framework for Marshaling XML to Perl (moose) Classes and back.
- Host: GitHub
- URL: https://github.com/perigrin/xml-toolkit
- Owner: perigrin
- Created: 2009-01-11T04:13:41.000Z (almost 16 years ago)
- Default Branch: master
- Last Pushed: 2013-12-18T22:54:12.000Z (about 11 years ago)
- Last Synced: 2024-05-01T22:51:42.968Z (8 months ago)
- Language: Perl
- Homepage: http://search.cpan.org/dist/XML-Toolkit
- Size: 2.48 MB
- Stars: 14
- Watchers: 6
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# XML::Toolkit #
XML::Toolkit is a suite of tools that work to make handling XML easier. It is designed to marshall XML documents into Moose classes and back again with minimal changes.
For example given a xml document like the following
Tove
Jani
Reminder
Don't forget me this weekend!
XML::Toolkit will generate classes for each of the elements. The element's class would be something like
package MyApp::Note;
use Moose;
use namespace::autoclean;
use XML::Toolkit;has 'to_collection' => (
isa => 'ArrayRef[MyApp::To]',
is => 'ro',
init_arg => 'tos',
traits => [qw(XML Array)],
lazy => 1,
auto_deref => 1,
default => sub { [] },
handles => { add_to => ['push'] },
description => {
Prefix => "",
LocalName => "to",
node_type => "child",
Name => "to",
NamespaceURI => "",
sort_order => 0,
},
);has 'from_collection' => (
isa => 'ArrayRef[MyApp::From]',
is => 'ro',
init_arg => 'froms',
traits => [qw(XML Array)],
lazy => 1,
auto_deref => 1,
default => sub { [] },
handles => { add_from => ['push'] },
description => {
Prefix => "",
LocalName => "from",
node_type => "child",
Name => "from",
NamespaceURI => "",
sort_order => 1,
},
);has 'body_collection' => (
isa => 'ArrayRef[MyApp::Body]',
is => 'ro',
init_arg => 'bodys',
traits => [qw(XML Array)],
lazy => 1,
auto_deref => 1,
default => sub { [] },
handles => { add_body => ['push'] },
description => {
Prefix => "",
LocalName => "body",
node_type => "child",
Name => "body",
NamespaceURI => "",
sort_order => 2,
},
);has 'heading_collection' => (
isa => 'ArrayRef[MyApp::Heading]',
is => 'ro',
init_arg => 'headings',
traits => [qw(XML Array)],
lazy => 1,
auto_deref => 1,
default => sub { [] },
handles => { add_heading => ['push'] },
description => {
Prefix => "",
LocalName => "heading",
node_type => "child",
Name => "heading",
NamespaceURI => "",
sort_order => 3,
},
);1;
__END__You can then use the set of classes to load the original document, or create new documents that match this structure.
my $document = MyApp::Note->new(
to_collection => [MyApp::To->new(text => 'Bob')],
from_collection => [MyApp::From->new(text => 'Alice')],
headings => [MyApp::Heading->new(text => 'Secret' )],
body_collection => [MyApp::Body->new(text=>'Shh!')],
)my $generator = Generator->new( );
$generator->render_object($document);
print $document->output;# output
#
#
# Bob
# Alice
# Secret
# Shhh!
#The original intention of XML::Toolkit was to round-trip XML documents with an unkonwn schema through an editor and back out to disk with very few semantic or structural changes.