diff options
Diffstat (limited to 'XPath/Node/Attribute.pm')
-rw-r--r-- | XPath/Node/Attribute.pm | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/XPath/Node/Attribute.pm b/XPath/Node/Attribute.pm new file mode 100644 index 0000000..3e7a6b6 --- /dev/null +++ b/XPath/Node/Attribute.pm @@ -0,0 +1,135 @@ +# $Id: Attribute.pm,v 1.9 2001/11/05 19:57:47 matt Exp $ + +package XML::XPath::Node::Attribute; + +use strict; +use vars qw/@ISA/; + +@ISA = ('XML::XPath::Node'); + +package XML::XPath::Node::AttributeImpl; + +use vars qw/@ISA/; +@ISA = ('XML::XPath::NodeImpl', 'XML::XPath::Node::Attribute'); +use XML::XPath::Node ':node_keys'; + +sub new { + my $class = shift; + my ($key, $val, $prefix) = @_; + + my $pos = XML::XPath::Node->nextPos; + + my @vals; + @vals[node_global_pos, node_prefix, node_key, node_value] = + ($pos, $prefix, $key, $val); + my $self = \@vals; + + bless $self, $class; + +} + +sub getNodeType { ATTRIBUTE_NODE } + +sub isAttributeNode { 1; } + +sub getName { + my $self = shift; + $self->[node_key]; +} + +sub getLocalName { + my $self = shift; + my $local = $self->[node_key]; + $local =~ s/.*://; + return $local; +} + +sub getNodeValue { + my $self = shift; + $self->[node_value]; +} + +sub getData { + shift->getNodeValue(@_); +} + +sub setNodeValue { + my $self = shift; + $self->[node_value] = shift; +} + +sub getPrefix { + my $self = shift; + $self->[node_prefix]; +} + +sub string_value { + my $self = shift; + return $self->[node_value]; +} + +sub toString { + my $self = shift; + my $string = ' '; +# if ($self->[node_prefix]) { +# $string .= $self->[node_prefix] . ':'; +# } + $string .= join('', + $self->[node_key], + '="', + XML::XPath::Node::XMLescape($self->[node_value], '"&><'), + '"'); + return $string; +} + +sub getNamespace { + my $self = shift; + my ($prefix) = @_; + $prefix ||= $self->getPrefix; + if (my $parent = $self->getParentNode) { + return $parent->getNamespace($prefix); + } +} + +1; +__END__ + +=head1 NAME + +Attribute - a single attribute + +=head1 API + +=head2 new ( key, value, prefix ) + +Create a new attribute node. + +=head2 getName + +Returns the key for the attribute + +=head2 getLocalName + +As getName above, but without namespace information + +=head2 getNodeValue / getData + +Returns the value + +=head2 setNodeValue + +Sets the value of the attribute node. + +=head2 getPrefix + +Returns the prefix + +=head2 getNamespace + +Return the namespace. + +=head2 toString + +Generates key="value", encoded correctly. + +=cut |