XML-SAX-Builder
view release on metacpan or search on metacpan
lib/XML/SAX/Builder.pm view on Meta::CPAN
XML::SAX::Builder::Tag->new( $self->{ Handler }, $tag, @args );
}
# Start a new namespace.
sub xmlns {
my $self = shift;
XML::SAX::Builder::Namespace->new( $self->{ Handler }, @_ );
}
# Output unescaped stuff.
sub xmlcdata {
my $self = shift;
XML::SAX::Builder::CDATA->new( $self->{ Handler }, @_ );
}
# Output an XML DOCTYPE
sub xmldtd {
my $self = shift;
XML::SAX::Builder::Doctype->new( $self->{ Handler }, @_ );
}
lib/XML/SAX/Builder.pm view on Meta::CPAN
use warnings;
use base 'XML::SAX::Builder::Base';
sub _make_closure {
my ( $class, $handler, @args ) = @_;
Carp::croak "arguments must be character data only"
if grep { ref } @args;
@args = grep { defined } @args;
return sub {
my ( $self, $nsup ) = @_;
$handler->start_cdata( {} );
$handler->characters( { Data => join ( '', @args ) } );
$handler->end_cdata( {} );
};
}
#---------------------------------------------------------------------
package XML::SAX::Builder::Doctype;
use strict;
use warnings;
use base 'XML::SAX::Builder::Base';
lib/XML/SAX/Builder.pm view on Meta::CPAN
Calling this method actually creates the XML document. That is to say,
it fires all the handlers for the objects that have been built up and
passed in. No XML will be output until this method has been called.
=item xmlns ( PREFIX, URI, CHILD )
This method inserts a new namespace into the resulting XML. PREFIX and
URI are the namespace prefix and uri. CHILD is either an element
object, or another namespace object.
=item xmlcdata ( TEXT, [ TEXT ] )
Inserts all arguments concatenated together inside a E<lt>![CDATA block.
=item xmldtd ( ELEMENT, SYSTEM [, PUBLIC ] )
Insert a DOCTYPE declaration into the resulting XML. You have to specify
ELEMENT as the top level element name.
=item xmlcomment ( TEXT )
$xb->xml(
$xb->xmlns( '' => 'urn:foo', $xb->xmlns( bar => 'urn:bar', $xb->foo() ) ) );
is(
$xml_str,
"<foo xmlns='urn:foo' xmlns:bar='urn:bar' />",
'got xml with multiple namespace'
);
{
local $TODO = 'Pending bugfix in XML::Filter::BufferText';
$xb->xml( $xb->foo( $xb->xmlcdata( '<dodgy>&<text>' ) ) );
is( $xml_str, "<foo><![CDATA[<dodgy>&<text>]]></foo>", 'got xml with cdata' );
}
{
my $prefix_el = 'pfx:foo';
$xb->xml( $xb->xmlns( pfx => 'urn:my-prefix', $xb->$prefix_el( 'bar') ) );
is( $xml_str, "<pfx:foo xmlns:pfx='urn:my-prefix'>bar</pfx:foo>",
'got xml with prefixed element name' );
}
# More prefix tests. Use the new way...
t/eventdata.t view on Meta::CPAN
my $self = shift;
my ( $class, $method ) = $AUTOLOAD =~ m/(.*)::(.*)/;
push @$self, [ $method, @_ ];
}
sub reset{ @{$_[0]} = () }
# Following XML::Filter::BufferText's example.
sub characters;
sub start_element; sub end_element;
sub start_document; sub end_document;
sub start_prefix_mapping; sub end_prefix_mapping;
sub start_cdata; sub end_cdata;
}
my $rec = Recorder->new;
my $x = XML::SAX::Builder->new( $rec );
my @tests = (
{
name => 'simple xml',
builder => $x->foo( 'bar' ),
t/eventdata.t view on Meta::CPAN
Prefix => 'foons',
NamespaceURI => 'urn:foo',
} ],
[ 'end_document', {} ],
]
},
#-----------------------------------------------------------------
{
name => 'xml with dodgy characters and cdata',
builder => $x->foo( $x->xmlcdata( '>bodgit&scarper<' ) ),
expected => [
[ 'start_document', {} ],
[ 'start_element', {
'Prefix' => '',
'LocalName' => 'foo',
'Name' => 'foo',
'NamespaceURI' => '',
} ],
[ 'start_cdata', {} ],
[ 'characters', { 'Data' => '>bodgit&scarper<' } ],
[ 'end_cdata', {} ],
[ 'end_element', {
'Prefix' => '',
'LocalName' => 'foo',
'Name' => 'foo',
'NamespaceURI' => '',
} ],
[ 'end_document', {} ],
],
},
( run in 0.424 second using v1.01-cache-2.11-cpan-ec4f86ec37b )