From 37da2f5823ef9c66a0b38a79ca8f05db0b9756fc Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Fri, 27 Mar 2009 12:31:11 +0100 Subject: libxml, no namespace support --- lib/Tree/Template/Declare/LibXML.pm | 61 +++++++++++++++++++++++++++++++++++++ t/04-xml.t | 26 ++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 lib/Tree/Template/Declare/LibXML.pm create mode 100644 t/04-xml.t diff --git a/lib/Tree/Template/Declare/LibXML.pm b/lib/Tree/Template/Declare/LibXML.pm new file mode 100644 index 0000000..7be3fe8 --- /dev/null +++ b/lib/Tree/Template/Declare/LibXML.pm @@ -0,0 +1,61 @@ +package Tree::Template::Declare::LibXML; +use strict; +use warnings; +use Carp; +use XML::LibXML; + +sub new { + my ($class)=@_; + + return bless {},$class; +} + +sub new_tree { + my ($self)=@_; + + return XML::LibXML::Document->new(); +} + +sub finalize_tree { + my ($self,$tree)=@_; + + return $tree; +} + +sub new_node { + my ($self)=@_; + + return XML::LibXML::Element->new(''); +} + +sub add_child_node { + my ($self,$parent,$child)=@_; + + my $doc=$parent->ownerDocument; + $child=$doc->adoptNode($child) if $doc; + + if ($parent->isa('XML::LibXML::Document')) { + $parent->setDocumentElement($child); + } + else { + $parent->appendChild($child); + } + return $parent; +} + +sub set_node_name { + my ($self,$node,$name)=@_; + + return $node->setNodeName($name); +} + +sub set_node_attributes { + my ($self,$node,$attrs)=@_; + + while (my ($name,$val)=each %$attrs) { + $node->setAttribute($name, $val); + } + return; +} + +1; diff --git a/t/04-xml.t b/t/04-xml.t new file mode 100644 index 0000000..606e06d --- /dev/null +++ b/t/04-xml.t @@ -0,0 +1,26 @@ +#!perl +use Test::Most 'no_plan','die'; +use strict; +use warnings; +use Tree::Template::Declare options => {builder => '+LibXML'}; +use Data::Dumper; + +my $tree=tree { + node { + name 'stuff'; + node { + name 'elem1'; + attribs id => 1; + node { + name 'sub1'; + } + }; + node { + name 'elem2'; + attribs id => 2; + }; + }; +}; + +diag $tree->serialize(); + -- cgit v1.2.3