XML-API

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

  $x->_comment($comment)
    Add an XML comment to $x. Is almost the same as this:

        $x->_raw("\n<!--");
        $x->_raw($content);
        $x->_raw('-->')

    Except that indentation is correct. Any occurences of '--' in $content
    will be replaced with '- -'.

  $x->_cdata($content)
    A shortcut for $x->_raw("\n<![CDATA[", $content, " ]]>");

  $x->_css($content )
    Adds $content inside a pair of CDATA tags which are encapsulated inside
    CSS comments. Similar to:

     $x->_raw('/*<![CDATA[*/ '. $content .' /*]]>*/');

  $x->_javascript($script )
    A shortcut for adding $script inside a pair of <script

example/xml-api.cgi  view on Meta::CPAN

my $lsrc  = length($src);
my $rsrc  = $x->_fast_string;
my $lrsrc = length($rsrc);
my $hsrc  = $h->_as_string;
my $lhsrc = length($hsrc);

$x->hr;

$x->p("The source of this page is $lsrc bytes:");
$x->pre_open( -style => 'color: #005555; background-color: #cfcfcf;' );
$x->_cdata($src);
$x->pre_close;

$x->p("The reduced source of this page is $lrsrc bytes:");
$x->pre_open( -style => 'color: #005555; background-color: #cfcfcf;' );
$x->_cdata($rsrc);
$x->pre_close;

print "Content-Type: application/xhtml+xml\n\n";
print $x . "\n";

lib/XML/API.pm  view on Meta::CPAN


sub as_string {
    my $self       = shift;
    my $indent     = shift || '';
    my $growindent = shift || '';

    if ( $self->{comment} ) {
        return $indent . '<!-- ' . $self->{comment} . ' -->';
    }

    if ( $self->{cdata} ) {
        return $indent . '<![CDATA[' . $self->{cdata} . ']]>';
    }

    if ( !@{ $self->{contents} } ) {
        return
            $indent . '<'
          . ( $self->{ns} ? $self->{ns} . ':' : '' )
          . $self->{element}
          . $self->attrs_as_string . ' />';
    }

lib/XML/API.pm  view on Meta::CPAN

    }
    $str .=
      '</' . ( $self->{ns} ? $self->{ns} . ':' : '' ) . $self->{element} . '>';
    return $str;
}

sub fast_string {
    my $self = shift;

    $self->{comment} && return '';
    $self->{cdata}   && return '<![CDATA[' . $self->{cdata} . ']]>';

    return
        '<'
      . ( $self->{ns} ? $self->{ns} . ':' : '' )
      . $self->{element}
      . $self->attrs_as_string . ' />'
      unless @{ $self->{contents} };

    return
        '<'

lib/XML/API.pm  view on Meta::CPAN

}

sub _comment {
    my $self = shift;

    # FIXME: should escape?
    $self->_raw( XML::API::Element->new( comment => join( '', @_ ) ) );
    return;
}

sub _cdata {
    my $self = shift;
    $self->_raw( XML::API::Element->new( cdata => join( '', @_ ) ) );
    return;
}

sub _css {
    my $self    = shift;
    my $content = shift;
    if ( $content =~ /\n/s ) {
        $self->_raw( '/*<![CDATA[*/' . "\n" . $content . '/*]]>*/' );
    }
    else {

lib/XML/API.pm  view on Meta::CPAN


Add an XML comment to $x. Is almost the same as this:

    $x->_raw("\n<!--");
    $x->_raw($content);
    $x->_raw('-->')

Except that indentation is correct. Any occurences of '--' in $content
will be replaced with '- -'.

=head2 $x->_cdata($content)

A shortcut for $x->_raw("\n<![CDATA[", $content, " ]]>");

=head2 $x->_css($content )

Adds $content inside a pair of CDATA tags which are encapsulated inside
CSS comments. Similar to:

 $x->_raw('/*<![CDATA[*/ '. $content .' /*]]>*/');

t/01-Element.t  view on Meta::CPAN

isa_ok( $e, 'XML::API::Element' );
is( $e->as_string, '<e />', 'single tag' );

$e->add('content');
is( $e->as_string, '<e>content</e>', 'single tag with content' );

my $c = XML::API::Element->new( comment => 'comment --', );
isa_ok( $c, 'XML::API::Element' );
is( $c->as_string, '<!-- comment - - -->', 'comment' );

my $cdata = XML::API::Element->new( cdata => 'cdata', );
isa_ok( $cdata, 'XML::API::Element' );
is( $cdata->as_string, '<![CDATA[cdata]]>', 'cdata' );

my $c1 = XML::API::Element->new( element => 'c1', );
$c1->add('cn1');

$e->add($c1);

is(
    $e->as_string( '', '  ' ),
    '<e>content
  <c1>cn1</c1>

t/03-XML-API.t  view on Meta::CPAN

      _ast
      _parse
      _parse_chunk
      _current
      _set_id
      _goto
      _attrs
      _set_lang
      _langs
      _css
      _cdata
      _javascript
      _as_string
      _fast_string
      /
);

# giving invalid doctype with new
throws_ok {
    XML::API->new( doctype => 'notexist' );
}

t/03-XML-API.t  view on Meta::CPAN

  <c>content</c>
  <n attr="1">
    <n2>content
      <n3 />
    </n2>
  </n>
  <p>&lt;raw /&gt;<raw /></p>
</e>', 'e c n p escaped and raw content'
);

$n->_cdata('my < CDATA');

#warn $n;
#warn $x;

is(
    "$x", '<?xml version="1.0" encoding="UTF-8" ?>
<e>
  <c>content</c>
  <n attr="1">
    <n2>content



( run in 0.741 second using v1.01-cache-2.11-cpan-454fe037f31 )