The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

XML::Tiny::Tree - Convert XML::Tiny output into a Tree

Synopsis

This is scripts/synopsis.pl:

        #!/usr/bin/env perl

        use strict;
        use warnings;

        use XML::Tiny::Tree;

        # ------------------------------------------------

        my($input_file) = shift || die "Usage $0 file. Try using data/test.xml as the input. \n";
        my($tree)       = XML::Tiny::Tree -> new
                                                (
                                                        input_file        => $input_file,
                                                        no_entity_parsing => 1,
                                                ) -> convert;

        print "Input file: $input_file. \n";
        print "The whole tree: \n";
        print map("$_\n", @{$tree -> tree2string});
        print '-' x 50, "\n";
        print "Bits and pieces from the first child (tag_4) of the second child (tag_3) of the root (tag_1): \n";

        my(@children) = $tree -> children;
        @children     = $children[1] -> children;
        my($tag)      = $children[0] -> value;
        my($meta)     = $children[0] -> meta;
        my($attr)     = $$meta{attributes};

        print "tag:        $tag. \n";
        print "content:    $$meta{content}. \n";
        print 'attributes: ', join(', ', map{"$_ => $$attr{$_}"} sort keys %$attr), ". \n";

Description

XML::Tiny::Tree reads a file via XML::Tiny, and reformats the output into a tree managed by Tree.

Constructor and Initialization

Calling new()

new() is called as my($obj) = XML::Tiny::Tree -> new(k1 => v1, k2 => v2, ...).

It returns a new object of type XML::Tiny::Tree.

Key-value pairs accepted in the parameter list (see corresponding methods for details [e.g. "input_file([$string])"]):

o fatal_declarations => $Boolean

Specify whether or not to get XML::Tiny to error if such declarations are found.

Default: 0.

This key is optional.

o input_file => $string

Specify the name of the XML file to process.

Default: ''.

This key is mandatory.

o no_entity_parsing => $Boolean

Specify whether or not to get XML::Tiny to do entity parsing.

Default: 0.

This key is optional.

o strict_entity_parsing => $Boolean

If set to true, any unrecognised entities (ie, those outside the core five plus numeric entities) cause a fatal error.

Default: 0.

This key is optional.

Distributions

This module is available as a Unix-style distro (*.tgz).

See http://savage.net.au/Perl-modules/html/installing-a-module.html for help on unpacking and installing distros.

Installing the module

Install XML::Tiny::Tree as you would for any Perl module:

Run:

        cpanm XML::Tiny::Tree

or run:

        sudo cpan XML::Tiny::Tree

or unpack the distro, and then either:

        perl Build.PL
        ./Build
        ./Build test
        sudo ./Build install

or:

        perl Makefile.PL
        make (or dmake)
        make test
        make install

Methods

convert([%arg])

Here, the [] indicate an optional parameter.

Triggers reading the XML file and conversion of the output of XML::Tiny into a Tree.

Returns an object of type Tree.

convert() takes the same parameters as "new([%arg])". See "Constructor and Initialization" for details.

fatal_declarations([$Boolean])

Here, the [] indicate an optional parameter.

Gets or sets the value of the option to pass to XML::Tiny.

fatal_declarations is a parameter to new([%arg]).

input_file([$string])

Here, the [] indicate an optional parameter.

Gets or sets the name of the input file to pass to XML::Tiny's method parsefile().

input_file is a parameter to new([%arg]).

new([%arg])

See "Constructor and Initialization" for details.

no_entity_parsing([$Boolean])

Here, the [] indicate an optional parameter.

Gets or sets the value of the option to pass to XML::Tiny.

no_entity_parsing is a parameter to new([%arg]).

strict_entity_parsing([$Boolean])

Here, the [] indicate an optional parameter.

Gets or sets the value of the option to pass to XML::Tiny.

strict_entity_parsing is a parameter to new([%arg]).

FAQ

How to I access the names of the XML tags?

Each node in the tree is an object of type Tree, and has a method called value(). This method returns a string which is the name of the tag.

See the "Synopsis" for sample code.

How do I access the attributes of each XML tag?

Each node in the tree is an object of type Tree, and has a method called meta(). This method returns a hashref containing 2 keys:

o attributes => $hashref
o content => $string

If the tag has no attributes, then $hashref is {}.

If the tag has no content, then $string is ''.

See the "Synopsis" for sample code.

How do I access the content of each XML tag?

See the answer to the previous question.

See the "Synopsis" for sample code.

Is it possible for a tag to have both content and sub-tags?

Yes. See data/test.xml in the distro for such a case.

See Also

XML::Tiny.

XML::Tiny::DOM.

Machine-Readable Change Log

The file Changes was converted into Changelog.ini by Module::Metadata::Changes.

Version Numbers

Version numbers < 1.00 represent development versions. From 1.00 up, they are production versions.

Repository

https://github.com/ronsavage/XML-Tiny-Tree.

Support

Email the author, or log a bug on RT:

https://rt.cpan.org/Public/Dist/Display.html?Name=XML-Tiny-Tree.

Author

XML::Tiny::Tree was written by Ron Savage <ron@savage.net.au> in 2015.

Home page: http://savage.net.au/index.html.

Copyright

Australian copyright (c) 2015, Ron Savage.

        All Programs of mine are 'OSI Certified Open Source Software';
        you can redistribute them and/or modify them under the terms of
        The Artistic License, a copy of which is available at:
        http://www.opensource.org/licenses/index.html