---
name: "XML::RPC::Enc::LibXML"
section: "3pm"
platform: "linux"
package: "libxml-rpc-fast-perl"
version: "0.8-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::RPC::Enc::LibXML"
---

# XML::RPC::Enc::LibXML(3pm)

Encode/decode XML-RPC using LibXML

## NAME

XML::RPC::Enc::LibXML - Encode/decode XML-RPC using LibXML

## SYNOPSIS

```
    use XML::RPC::Fast;
    use XML::RPC::Enc::LibXML;

    my $rpc = XML::RPC::Fast->new(
        $uri,
        encoder => XML::RPC::Enc::LibXML->new(
            # internal_encoding currently not implemented, always want wide chars
            internal_encoding => undef,
            external_encoding => 'windows-1251',
        )
    );
    $rpc->registerType( base64 => sub {
        my $node = shift;
        return MIME::Base64::decode($node->textContent);
    });
    $rpc->registerType( 'dateTime.iso8601' => sub {
        my $node = shift;
        return DateTime::Format::ISO8601->parse_datetime($node->textContent);
    });
    $rpc->registerClass( DateTime => sub {
        return ( 'dateTime.iso8601' => $_[0]->strftime('%Y%m%dT%H%M%S.%3N%z') );
    });
    $rpc->registerClass( DateTime => sub {
        my $node = XML::LibXML::Element->new('dateTime.iso8601');
        $node->appendText($_[0]->strftime('%Y%m%dT%H%M%S.%3N%z'));
        return $node;
    });
```

## DESCRIPTION

Default encoder/decoder for XML::RPC::Fast

If MIME::Base64 is installed, decoder for `"XML-RPC"` type `"base64"` will be setup

If DateTime::Format::ISO8601 is installed, decoder for `"XML-RPC"` type `"dateTime.iso8601"` will be setup

Also will be setup by default encoders for Class::Date and DateTime (will be encoded as `"dateTime.iso8601"`)

Ty avoid default decoders setup:

```
    BEGIN {
        $XML::RPC::Enc::LibXML::TYPES{base64} = 0;
        $XML::RPC::Enc::LibXML::TYPES{'dateTime.iso8601'} = 0;
    }
    use XML::RPC::Enc::LibXML;
```

## IMPLEMENTED METHODS

### new

### request

### response

### fault

### decode

### registerType

### registerClass

## SEE ALSO

- •

  XML::RPC::Enc

  Base class (also contains documentation)

Q: What is the legal syntax (and range) for integers?\
    How to deal with leading zeros?\
    Is a leading plus sign allowed?\
    How to deal with whitespace?

A: An integer is a 32-bit signed number.\
    You can include a plus or minus at the beginning of a string of numeric characters.\
    Leading zeros are collapsed.\
    Whitespace is not permitted.\
    Just numeric characters preceded by a plus or minus.

Q: What is the legal syntax (and range) for floating point values (doubles)?\
    How is the exponent represented?\
    How to deal with whitespace?\
    Can infinity and "not a number" be represented?

A: There is no representation for infinity or negative infinity or "not a number".\
    At this time, only decimal point notation is allowed, a plus or a minus,\
    followed by any number of numeric characters,\
    followed by a period and any number of numeric characters.\
    Whitespace is not allowed.\
    The range of allowable values is implementation-dependent, is not specified.

```
                # int
                '+0' => 0
                '-0' => 0
                '+1234567' => 1234567
                '0777' => 777
                '0000000000000' => 0
                '0000000000000000000000000000000000000000000000000' => 0
                # not int
                '999999999999999999999999999999999999';
```

## COPYRIGHT & LICENSE

Copyright (c) 2008-2009 Mons Anderson.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## AUTHOR

Mons Anderson, `"<mons@cpan.org>"`
