
XML::Generator::vCard - generate SAX2 events for vCard 3.0

use XML::SAX::Writer;
use XML::Generator::vCard;
my $writer = XML::SAX::Writer->new();
my $driver = XML::Generator::vCard->new(Handler=>$writer);
$driver->parse_files("test.vcf");

Generate SAX2 events for vCard 3.0.
This package supersedes XML::SAXDriver::vCard.

SAX2 events map to the vCard 3.0 XML DTD draft:
http://xml.coverpages.org/draft-dawson-vcard-xml-dtd-00.txt
The draft itself has since expired but it still seems like a perfectly good place to start from.

This method inherits from XML::SAX::Base.
Returns a XML::Generator::vCard object.

Generate SAX2 events for one, or more, vCard files.
Returns true or false.

Private methods are documented below in case you need to subclass this package to tweak its output.
By default this method does nothing. It is here to be subclassed.
Returns a hash ref mapping an instant messaging service type to an XML element. Default is :
{"aim" => "foaf:aimChatID",
"yahoo" => "foaf:yahooChatID",
"msn" => "foaf:msnChatID",
"jabber" => "foaf:JabberID",
"icq" => "foaf:icqChatId"}
This is called by the _render_instantmessaging method.
Returns a hash reference of prefix - URI pairs.

This package generates SAX events using the following XML namespaces :
x-urn:cpan:ascope:xml-generator-vcard#
http://xmlns.com/foaf/0.1/

package MyGenerator;
use base qw (XML::Generator::vCard);
sub _render_card {
my $self = shift;
my $card = shift;
my $cats = $vcard->get({"node_type" => 'categories'}) ||
$vcard->get({"node_type" => 'category'});
if (! $cats) {
return 1;
}
if (! grep { $_->value() eq "foo" } split(",",$cats->[0])) {
return 1;
}
return $self->SUPER::_render_card($vcard);
}
package main;
my $writer = XML::SAX::Writer->new();
my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);
package MyGenerator;
use base qw (XML::Generator::vCard);
sub _render_custom {
my $self = shift;
my $vcard = shift;
my $custom = $vcard->get({"node_type" => "x-foobar"});
if (! $addresses) {
next;
}
foreach my $foo (@$custom) {
my $types = join(";",$foo->types());
$self->_pcdata({Name => "foo:bar",
Value => $foo->value(),
Attributes => {"{}type"=> {Name => "type",
Value => $types}}
});
}
return 1;
}
package main;
my $writer = XML::SAX::Writer->new();
my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);
package MyGenerator;
use base qw (XML::Generator::vCard);
sub _namespaces {
my $self = shift;
my $ns = $self->SUPER::_namespaces();
$ns->{ "foo" } = "x-urn:foo:bar#";
return $ns;
}
package main;
my $writer = XML::SAX::Writer->new();
my $parser = MyGenerator->new(Handler=>$writer);
$parser->parse_files(@ARGV);

1.1

$Date: 2004/10/17 22:53:17 $

Aaron Straup Cope <ascope@cpan.org>

http://www.ietf.org/rfc/rfc2426.txt
http://www.ietf.org/rfc/rfc2425.txt

Please report all bugs via http://rt.cpan.org

Copyright (c) 2004, Aaron Straup Cope. All Rights Reserved.
This is free software, you may use it and distribute it under the same terms as Perl itself.