404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.133.117.95: ~ $
package XML::LibXML::AttributeHash;

use strict;
use warnings;
use Scalar::Util qw//;
use Tie::Hash;
our @ISA = qw/Tie::Hash/;

use vars qw($VERSION);
$VERSION = "2.0132"; # VERSION TEMPLATE: DO NOT CHANGE

BEGIN
{
    *__HAS_WEAKEN  = defined(&Scalar::Util::weaken)
        ? sub () { 1 }
        : sub () { 0 };
};

sub element
{
    return $_[0][0];
}

sub from_clark
{
    my ($self, $str) = @_;
    if ($str =~ m! \{ (.+) \} (.+) !x)
    {
        return ($1, $2);
    }
    return (undef, $str);
}

sub to_clark
{
    my ($self, $ns, $local) = @_;
    defined $ns ? "{$ns}$local" : $local;
}

sub all_keys
{
    my ($self, @keys) = @_;

    my $elem = $self->element;

    foreach my $attr (defined($elem) ? $elem->attributes : ())
    {
        if (! $attr->isa('XML::LibXML::Namespace'))
        {
            push @keys, $self->to_clark($attr->namespaceURI, $attr->localname);
        }
    }

    return sort @keys;
}

sub TIEHASH
{
    my ($class, $element, %args) = @_;
    my $self = bless [$element, undef, \%args], $class;
    if (__HAS_WEAKEN and $args{weaken})
    {
        Scalar::Util::weaken( $self->[0] );
    }
    return $self;
}

sub STORE
{
    my ($self, $key, $value) = @_;
    my ($key_ns, $key_local) = $self->from_clark($key);
    if (defined $key_ns)
    {
        return $self->element->setAttributeNS($key_ns, "xxx:$key_local", "$value");
    }
    else
    {
        return $self->element->setAttribute($key_local, "$value");
    }
}

sub FETCH
{
    my ($self, $key) = @_;
    my ($key_ns, $key_local) = $self->from_clark($key);
    if (defined $key_ns)
    {
        return $self->element->getAttributeNS($key_ns, "$key_local");
    }
    else
    {
        return $self->element->getAttribute($key_local);
    }
}

sub EXISTS
{
    my ($self, $key) = @_;
    my ($key_ns, $key_local) = $self->from_clark($key);
    if (defined $key_ns)
    {
        return $self->element->hasAttributeNS($key_ns, "$key_local");
    }
    else
    {
        return $self->element->hasAttribute($key_local);
    }
}

sub DELETE
{
    my ($self, $key) = @_;
    my ($key_ns, $key_local) = $self->from_clark($key);
    if (defined $key_ns)
    {
        return $self->element->removeAttributeNS($key_ns, "$key_local");
    }
    else
    {
        return $self->element->removeAttribute($key_local);
    }
}

sub FIRSTKEY
{
    my ($self) = @_;
    my @keys = $self->all_keys;
    $self->[1] = \@keys;
    if (wantarray)
    {
        return ($keys[0], $self->FETCH($keys[0]));
    }
    $keys[0];
}

sub NEXTKEY
{
    my ($self, $lastkey) = @_;
    my @keys = defined $self->[1] ? @{ $self->[1] } : $self->all_keys;
    my $found;
    foreach my $k (@keys)
    {
        if ($k gt $lastkey)
        {
            $found = $k and last;
        }
    }
    if (!defined $found)
    {
        $self->[1] = undef;
        return;
    }
    if (wantarray)
    {
        return ($found, $self->FETCH($found));
    }
    return $found;
}

sub SCALAR
{
    my ($self) = @_;
    return $self->element;
}

sub CLEAR
{
    my ($self) = @_;
    foreach my $k ($self->all_keys)
    {
        $self->DELETE($k);
    }
    return $self;
}

__PACKAGE__
__END__

=head1 NAME

XML::LibXML::AttributeHash - tie an XML::LibXML::Element to a hash to access its attributes

=head1 SYNOPSIS

 tie my %hash, 'XML::LibXML::AttributeHash', $element;
 $hash{'href'} = 'http://example.com/';
 print $element->getAttribute('href') . "\n";

=head1 DESCRIPTION

This class allows an element's attributes to be accessed as if they were a
plain old Perl hash. Attribute names become hash keys. Namespaced attributes
are keyed using Clark notation.

 my $XLINK = 'http://www.w3.org/1999/xlink';
 tie my %hash, 'XML::LibXML::AttributeHash', $element;
 $hash{"{$XLINK}href"} = 'http://localhost/';
 print $element->getAttributeNS($XLINK, 'href') . "\n";

There is rarely any need to use XML::LibXML::AttributeHash directly. In
general, it is possible to take advantage of XML::LibXML::Element's
overloading. The example in the SYNOPSIS could have been written:

 $element->{'href'} = 'http://example.com/';
 print $element->getAttribute('href') . "\n";

The tie interface allows the passing of additional arguments to
XML::LibXML::AttributeHash:

 tie my %hash, 'XML::LibXML::AttributeHash', $element, %args;

Currently only one argument is supported, the boolean "weaken" which (if
true) indicates that the tied object's reference to the element should be
a weak reference. This is used by XML::LibXML::Element's overloading. The
"weaken" argument is ignored if you don't have a working Scalar::Util::weaken.

Filemanager

Name Type Size Permission Actions
SAX Folder 0755
Attr.pod File 4.02 KB 0644
AttributeHash.pm File 4.49 KB 0644
Boolean.pm File 1.56 KB 0644
CDATASection.pod File 1.28 KB 0644
Comment.pod File 1.36 KB 0644
Common.pm File 8.22 KB 0644
Common.pod File 3.59 KB 0644
DOM.pod File 6.23 KB 0644
Devel.pm File 4.91 KB 0644
Document.pod File 20.9 KB 0644
DocumentFragment.pod File 819 B 0644
Dtd.pod File 1.99 KB 0644
Element.pod File 13.48 KB 0644
ErrNo.pm File 27.83 KB 0644
ErrNo.pod File 591 B 0644
Error.pm File 8.47 KB 0644
Error.pod File 5.97 KB 0644
InputCallback.pod File 9.59 KB 0644
Literal.pm File 2.04 KB 0644
Namespace.pod File 3.28 KB 0644
Node.pod File 25.38 KB 0644
NodeList.pm File 7.31 KB 0644
Number.pm File 1.87 KB 0644
PI.pod File 2.22 KB 0644
Parser.pod File 27.49 KB 0644
Pattern.pod File 2.89 KB 0644
Reader.pm File 5.75 KB 0644
Reader.pod File 17.57 KB 0644
RegExp.pod File 1.54 KB 0644
RelaxNG.pod File 2.08 KB 0644
SAX.pm File 2.96 KB 0644
SAX.pod File 1.76 KB 0644
Schema.pod File 1.96 KB 0644
Text.pod File 5.47 KB 0644
XPathContext.pm File 3.15 KB 0644
XPathContext.pod File 11.49 KB 0644
XPathExpression.pod File 1.64 KB 0644