summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-27 12:31:11 +0100
committerGianni Ceccarelli <dakkar@dechirico.(none)>2009-03-27 12:31:11 +0100
commit37da2f5823ef9c66a0b38a79ca8f05db0b9756fc (patch)
tree0511e27d87e3cf2e857a2c04081fbabc33e20e63
parentHTML::Element builder (diff)
downloadTree-Template-Declare-37da2f5823ef9c66a0b38a79ca8f05db0b9756fc.tar.gz
Tree-Template-Declare-37da2f5823ef9c66a0b38a79ca8f05db0b9756fc.tar.bz2
Tree-Template-Declare-37da2f5823ef9c66a0b38a79ca8f05db0b9756fc.zip
libxml, no namespace support
-rw-r--r--lib/Tree/Template/Declare/LibXML.pm61
-rw-r--r--t/04-xml.t26
2 files changed, 87 insertions, 0 deletions
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();
+