package CommonObject; use strict; use XML::LibXML; use vars qw{ @ISA }; @ISA= qw{ XML::LibXML::Element }; sub createTextField { my ($self, $fieldname, $fieldvalue) = @_; my ($newelem, $textnode); if (defined($fieldname)) { $newelem = XML::LibXML::Element->new($fieldname); } else { return undef; } # The Perl XML::LibXML implementation requires that a text node's data be # set to a defined value, so we set it to an empty string if $fieldvalue # is undefined. This will happen if an initial text field value is not # specified. # $fieldvalue = '' unless (defined($fieldvalue)); if ($newelem) { $textnode = XML::LibXML::Text->new($fieldvalue); } else { return undef; } if (defined($textnode)) { $newelem->appendChild($textnode); $self->appendChild($newelem); } else { return undef; } return $newelem; } sub setTextFieldValue { my $self = shift; my $fieldname = shift; my $newvalue = shift; if (defined($fieldname)) { my $nodelist = $self->findnodes("./$fieldname"); my $node = $nodelist->item(0) if ($nodelist->size() > 0); return undef unless defined($node); my $textnode = $node->getFirstChild(); if ($textnode->isa('XML::LibXML::Text')) { my $oldvalue = $textnode->getData(); if (defined($oldvalue)) { $oldvalue =~ s/^\s+//; # Cut leading whitespace. $oldvalue =~ s/\s+$//; # Cut trailing whitespace. } else { $oldvalue = ''; } if (defined($newvalue)) { $textnode->setData($newvalue); } else { $textnode->setData(''); } return $oldvalue; } else { return undef; } } return undef; } sub getTextFieldValue { my $self = shift; my $fieldname = shift; if (defined($fieldname)) { my $node; foreach my $child ($self->childNodes()) { if ($child->isa('XML::LibXML::Element')) { my $name = $child->localname(); if ($name eq $fieldname) { $node = $child; last; } } } return undef unless defined($node); my $textnode = $node->getFirstChild(); #printf(qq{Found Text node: $textnode with data "%s"\n}, # $textnode->getData()); if (defined($textnode) && $textnode->isa('XML::LibXML::Text')) { my $value = $textnode->getData(); if (defined($value)) { $value =~ s/^\s+//; # Cut leading whitespace. $value =~ s/\s+$//; # Cut trailing whitespace. } else { $value = ''; } return $value; } else { return ''; } } return undef; } 1;