NAME

SVG::DOM - Perform DOM (Document object model) manipulations of the SVG object.

SUMMARY

An API for accessing the SVG DOM.

AUTHOR

Ronan Oger, ronan@roasp.com

SYNOPSIS

use SVG;

my $s = SVG->new(width=>100,height=>50);
my $g1 = $s->group();
my $g2 = $s->group();
$g1->circle(width=>1,height=>1,id=>'test_id');
$g1->rect(id=>'id_2');
$g1->rect(id=>'id_3');
$g1->rect(id=>'id_4',x=>15,y=>150);
$g1->anchor(-xref=>'http://www.roasp.com/tutorial/',id=>'anchor_1')
	->text(id=>'text_1',x=>15,y=>150,stroke=>'red')->cdata('Hello, World');
$g2->ellipse(id=>'id_5');
$g2->ellipse(id=>'id_6');
$g2->ellipse(id=>'id_7');
$s->ellipse(id=>'id_8');
$s->ellipse(id=>'id_9');

print "I am an SVG document.\n";
print "Here is my XML markup:\n----\n";
print $s->xmlify();

#
# Test of getElementName
#
print "\n\n\nI am actually an element of type ".$s->getElementName()."\n\n\n";
print "-----------------\n","Let's take a look at my attributes\n";

#
# Test of getAttributes
#
show_attributes($s);

print "Let's take a look at the getElement support...";
#
# Test of getElements
#
my @e_names = qw/rect ellipse a g svg/;

foreach my $e_name (@e_names) {

	print "\n\n\nThere are ".scalar @{$s->getElements($e_name)}." '$e_name' elements\n";
	print "\nThis is what they render as using xmlify:\n";

	foreach my $e (@{$s->getElements($e_name)}) {
		my $e_id = $e->getElementID() || '0';
		print "$e -->".$e->xmlify()."\n has id ".$e_id."\nwhich returns handle  -->\n".$s->getElementByID($e_id)."\n
		which renders as: -->\n";
		if ($s->getElementByID($e_id)) {
			print $s->getElementByID($e_id)->xmlify();
		} else {
			print "\n\nOops, I'm afraid that ".$s->getElementByID($e_id)." does not exist with element id '$e_id'\n\n";
			print "That is because this element has no id. You will notice that \$s->getElementByID(\$e_id) is zero because there is no\n";
		}
		print "\n\n------------------\n";
	}

}

print "-----------------\n","Let's get back to me and take a look at my attributes\n";

print "\n-----------------\n","\n\nDo I have any child elements?\n";

my $kids = $s->getChildren();

print "Look at that, I have  ",scalar (@$kids)," child (\$n should be 1)\n";
#foreach my $v (@$kids) {print $kids->[$v]->xmlify()."\n\n";}

foreach my $v (@$kids) {print "Element name = ",$v->getElementName(),"\n\n";show_attributes($v);}

#
# Test of getChildren
#
my $childs = $g1->getChildren();
my $n = scalar (@$childs) -1 ;
my @a = (0..$n);
foreach my $v (@a) {
	print $childs->[$v]->xmlify();
	#
	# Test of getParent
	#
	my $parent = $childs->[$v]->getParent();
	print "its parent contains\n".$parent->xmlify();

	#
	# Test of getElementName on the parent
	#
	my $name = $parent->getElementName;
	print "the parent is an <".$name."></$name> element and";
	#
	# Test of getElementName on itself
	#
	my $name = $childs->[$v]->getElementName;
	print "the child element is an <".$name."></$name> element\n\n";

	#
	# Test of getAttributes
	#
	my $ref = $childs->[$v]->getAttributes();
	my @attrs = keys %$ref;
	print "The child has " . scalar @attrs . " attributes:\n";
	foreach my $i (@attrs) {
		print "attribute = $i value = $ref->{$i}\n";
	}

	print "\n---------------\n";
}

#
# print out the attributes list
#
sub show_attributes ($) {
	$node = shift;
	my $ref = $node->getAttributes();
	my @attrs = keys %$ref;
	print "I have " . scalar @keys . " attributes:\n";
	foreach my $i (@attrs) {
		print "attribute='$i' value='$ref->{$i}'\n";
	}
}

METHODS

All of the SVG::DOM methods are exported to the SVG module and can be directly called from it.

For an example of the use of these methods, see file

$ref = $svg->getFirstChild()

return the reference of the first defined child of the current node

$ref = $svg->getElementByID($id)

Return the reference to the element which has id $id

$id = $obj->getElementID()

return the string containing the value of the element ID if it exists.

@elementrefs = $obj->getElements()

return an array of element objet references

$ref = $obj->getParentElement()

return the reference to an element's parent object

$val = $obj->getElementName()

return a string containing the element name (type) of an element object reference

$type = $obj->getType()

See as getElementName

$ref = $obj->getAttributes()

return a reference to a hash whose keys are the attribute name and the values are the attribute values.

$value = $obj->getAttribute($name);

return the string value attribute value for an attribute of name $name

$ref = $obj->getLastChild()

return the reference of the last defined child of the current node

@array_of_Refs = $obj->getChildren()

return the array of references of the children of the current node

$ref = $obj->getParent()

return the reference of the parent of the current node

$ref = $obj->getSiblings()

return the reference to an array composed of references of the siblings of the current node

$ref = $obj->getAttribute('attributeName')

return a string with the value of the attribute. $ref is the reference to the element that contains the attribute 'attributeName'.

To pe provided: $ref = getCDATA ($ref)

SEE ALSO

perl(1),SVG,SVG::XML,SVG::Element,SVG::Parser, SVG::Manual

<http://www.roasp.com/>

<http://www.perlsvg.com/>

<http://www.roitsystems.com/>

<http://www.w3c.org/Graphics/SVG/>