NAME
Nile::XML - XML file manager.
SYNOPSIS
# get a reference to the framework xml object.
$xml = $self->app->xml;
# get a reference to a new xml object.
$xml = $self->app->xml->new;
# keep sort order when reading and writing the xml file data. default is off.
#$xml->keep_order(1);
# load xml file
$xml->load("path/to/xml/file.xml");
# load and append another xml file to the same object
$xml->load("path/to/xml/another.xml");
# get value of email tag <email>ahmed@mewsoft.com</email>
say $xml->get('email');
# get tag value, if not found return the provided default value.
$var = $xml->get($name, $default);
# get tag attribute of email tag <email status='expired'>ahmed@mewsoft.com</email>
# The prefix '-' is added on every attribute's name.
say $xml->get('email')->{'-status'};
# if an element has both of a text node and attributes or both of a text node and other child nodes,
# value of a text node is moved to #text like child nodes.
say $xml->get('email')->{'#text'};
# get value of email tag inside other tags
# <users><user><contact><email>ahmed@mewsoft.com</email></contact></user></users>
say $xml->get('users/user/contact/email');
# automatic getter support
$email = $xml->email; # same as $xml->get('email');
# automatic setter support
$xml->email('ahmed@mewsoft.com'); # $xml->set('email', 'ahmed@mewsoft.com');
# set value of email tag <email></email>
$xml->set('email', 'ahmed@mewsoft.com');
# set value of email tag inside other tags
# <users><user><contact><email></email></contact></user></users>
$xml->set('users/user/contact/email', 'ahmed@mewsoft.com');
# access variables as a hash tree
$xml->var->{accounts}->{users}->{admin}->{username} = 'admin';
# get a list of tags values.
($users, $views, $items) = $xml->list( qw( users views items ) );
# delete xml tags by names
$xml->delete(@names);
# delete entire xml object contents in memory
$xml->clear();
# load and append another xml file to the object
$xml->add_file($another_file);
# updated the provided tags and save changes to the file
$xml->update(%tags);
# Save changes to the output file. If no file name just update the loaded file name.
$xml->save($file);
# load xml file content and return it as a hash, not added to the object
%xml_hash = $xml->get_file($file);
say $xml_hash{root}{config}{database}{user};
# load xml file content and return it as a hash ref, not added to the object
$xml_hash_ref = $xml->get_file($file);
say $xml_hash_ref->{root}->{config}->{database}->{user};
# get a new xml object
#my $xml_other = $xml->object;
#my $xml_other = $xml->new;
# load and manage another xml files separately
#$xml_other->load("xmlfile");
DESCRIPTION
Nile::XML - XML file manager.
Parsing and writing XML files into a hash tree object supports sorted order and build on the module XML::TreePP.
xml()
# get a new XML::TreePP object.
$xml_obj = $xml->xml(@names);
# then you can use $xml_obj as XML::TreePP object.
Returns a new XML::TreePP object.
file()
# set output file name for saving
$xml->file($file);
# get output file name
$file = $xml->file();
Get and set the output xml file name used when saving or updating.
encoding()
# get encoding used to read/write the file, default is 'UTF-8'.
$encoding = $xml->encoding();
# set encoding used to read/write the file, default is 'UTF-8'.
$xml->encoding('UTF-8');
Get and set encoding used to read/write the xml file The default encoding is 'UTF-8'.
indent()
# get indent, default 4.
$indent = $xml->indent();
# set indent.
$xml->indent(6);
This makes the output more human readable by indenting appropriately.
load()
# get xml object
$xml = $self->app->xml->new;
# load xml file
$xml->load($file);
# load and append another xml file
$xml->load($another);
Loads xml files to the object in memory. This will not clear any previously loaded files. To will add files. This method can be chained $xml-
load($file)->add_file($another_file)>;
keep_order()
# keep sort order when loading and saving the file. default is off.
$xml->keep_order(1);
# turn it off
$xml->keep_order(0);
This option keeps the order for each element appeared in XML. Tie::IxHash module is required. This makes parsing performance slow (about 100% slower than default). But sometimes it is required for example when loading url routes files, it is important to keep routes in the same sorted order in the files.
get()
# get value of email tag <email>ahmed@mewsoft.com</email>
say $xml->get('email'); # returns ahmed@mewsoft.com
# get tag value, if not found return the optional provided default value.
$var = $xml->get($name, $default);
# get value of email tag inside other tags
# <users><user><contact><email>ahmed@mewsoft.com</email></contact></user></users>
say $xml->get('users/user/contact/email'); # returns ahmed@mewsoft.com
# automatic getter support
$email = $xml->email; # same as $xml->get('email');
# get list
# <lang><file>general</file><file>contact</file><file>register</file></lang>
@files = $xml->get("lang/file");
Returns xml tag value, if not found returns the optional provided default value.
set()
# set tag value
$xml->set('email', 'ahmed@mewsoft.com');
# set a group of tags
$xml->set(%tags);
# set value of nested tags
# <users><user><contact><email>ahmed@mewsoft.com</email></contact></user></users>
$xml->set('users/user/contact/email', 'ahmed@mewsoft.com');
Sets tags values.
list()
# get a list of tags values.
@values = $xml->list(@names);
($users, $views, $items) = $xml->list( qw( users views items ) );
Returns a list of tags values.
var()
# get a hash ref to the xml data for direct access.
$xml_ref = $xml->var();
$xml_ref->{root}->{users}->{user}->{admin} = 'username';
say $xml_ref->{root}->{users}->{user}->{admin};
Returns a hash reference to the in memory xml data.
delete()
# delete tags from memory, changes will apply when saving file.
$xml->delete(@names);
Delete a list of tags. Tags will be deleted from the object and memory only and will apply when updating or saving the file.
clear()
# delete entire xml object data.
$xml->clear();
Completely clears all loaded xml data from memory. This does not apply to the file until file is updated or saved.
update()
# save a list of variables and update the file.
$xml->update(%vars);
Set list of variables and save to the output file immediately.
save()
# write the output file.
$xml->save($file);
Save changes to the output file. If no file name just update the loaded file name.
get_file()
# load xml file content and return it as a hash, not added to the object
%xml_hash = $xml->get_file($file);
say $xml_hash{root}{config}{database}{user};
# load xml file content and return it as a hash ref, not added to the object
$xml_hash_ref = $xml->get_file($file);
say $xml_hash_ref->{root}->{config}->{database}->{user};
Load xml file content and return it as a hash or hash ref, not added to the object.
add_file()
# load and append another xml file to the object
$xml->add_file($another_file);
Load and append another xml file to the object.
Bugs
This project is available on github at https://github.com/mewsoft/Nile.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Nile.
SOURCE
Source repository is at https://github.com/mewsoft/Nile.
SEE ALSO
See Nile for details about the complete framework.
AUTHOR
Ahmed Amin Elsheshtawy, احمد امين الششتاوى <mewsoft@cpan.org> Website: http://www.mewsoft.com
COPYRIGHT AND LICENSE
Copyright (C) 2014-2015 by Dr. Ahmed Amin Elsheshtawy احمد امين الششتاوى mewsoft@cpan.org, support@mewsoft.com, https://github.com/mewsoft/Nile, http://www.mewsoft.com
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.