The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

sub new {
my $class = shift;
return bless { }, $class;
}
sub serializeToString {
my ($self, $node) = @_;
unless (ref $self) {
$self = __PACKAGE__->new;
}
if ($node->nodeType == DOCUMENT_NODE) {
$node = $node->firstChild;
}
$self->{_indent_level} = 0 unless defined $self->{_indent_level};
my $out = "";
if ($node->nodeType == ELEMENT_NODE) {
$out .= $self->_mkIndent()."<".$node->tagName;
foreach my $att (@{$node->attributes}) {
$out .= " $att->{nodeName}=\"".$att->{nodeValue}."\"";
}
if ($node->childNodes->length) {
$out .= ">\n";
$self->{_indent_level}++;
foreach my $n (@{$node->childNodes}) {
$out .= $self->serializeToString($n);
}
$self->{_indent_level}--;
$out .= $self->_mkIndent()."</".$node->tagName.">\n";
} else {
$out .= " />\n";
}
}
elsif ($node->nodeType == TEXT_NODE) {
$out .= $node->nodeValue;
}
return $out;
}
sub _mkIndent {
my ($self) = @_;
return (" " x (2 * $self->{_indent_level}));
}
1;