Claws Mail Adressbuch per script auslesen
Datum: 26.09.2009 22:57
Message-ID: <h9lv72$fbe$1@news.eternal-september.org>
Newsgroup: de.comp.lang.perl.misc
Hallo liebe Experten,
ich habe als absoluter Laie eine Frage an die Experten:
Ich versuche mein Claws-Mail Adressbuch. welches im XML Format vorliegt
in eine csv Datei zu exportieren, um diese dann als Datenquelle in
OpenOffice einzubeinden. Dazu wird auf der CM Homepage ein Script zum
Donload angeboten. Allerdings erfüllt dies nicht ganz seinen Zweck, denn
1.) werden die zusätzlich benötigten Felder wie Ort, PLZ, Adresse nicht
ausgelesen
und
2.) wird jeder Datensatz, sollte er beispielsweise zwei Mailadressen
enthalten, mehrfach in die CSV Datei eingefügt.
Vielleicht könnt Ihr mir ja das Script entsprechend abändern...
Mein Dank ist Euch gewiss :-)
Hier also zunächst einmal das Script:
#! /usr/bin/perl -w
# Released under the Perl Artistic License
#
# copyright 2007 Celejar <celejar@gmail.com>
# usage: clawsxml2csv < [/path/to/]addrbook-000001.xml > addrbook-000001.csv
use XML::Parser;
use Text::CSV_XS;
use IO::Wrap;
use strict;
my %known_elements = ('person', \&person, 'address', \&address);
my (%person_attrs, %address_attrs);
my @person_import_fields = ('first-name', 'last-name', 'cn', 'nick-name');
my @address_import_fields = ('email', 'remarks');
my $parser = new XML::Parser;
$parser->setHandlers('Start' => \&start_handler);
my $csv = new Text::CSV_XS({'binary' => 1});
my $stdout = wraphandle(\*STDOUT);
$parser->parse(*STDIN);
# The End!
sub start_handler {
my $parser = shift;
my $element = shift;
&{$known_elements{$element}}(@_) if $known_elements{$element};
}
sub person {
%person_attrs = @_;
}
sub address {
%address_attrs = @_;
$csv->print($stdout, [@person_attrs{@person_import_fields},
@address_attrs{@address_import_fields}]);
print "\n";
}
... und hier einmal ein Beispiel aus dem Claws Mail Adressbuch (XML
Datei):
<?xml version="1.0" encoding="UTF-8" ?>
<address-book name="Persönliche Adressen" >
<person uid="255984397" first-name="Daisy"
last-name="Duck"
nick-name="" cn="Doofi" > <address-list> <address
uid="255984400"
alias="" email="daisy.duck@domain1.de" remarks="" />
<address
uid="255984402" alias="" email="daisy.duck@domain2.de"
remarks="" />
</address-list> <attribute-list> <attribute uid="255984401"
name="Adresse" >Entenstr. 5</attribute> <attribute
uid="255984398"
name="Ort" >Entenhausen</attribute> <attribute
uid="255984399"
name="PLZ"
>4711</attribute> </attribute-list> </person> <person
uid="255994240"
first-name="Donald" last-name="Duck" nick-name=""
cn="Donny" > <address-list> <address uid="255994241"
alias=""
email="donald@domain.de" remarks="" /> </address-list>
<attribute-list> <attribute uid="255994242" name="Adresse"
>Blubberstr. 169</attribute> <attribute uid="255994243"
name="Ort"
>Entenhausen</attribute> <attribute uid="255994244"
name="PLZ"
>46258</attribute> </attribute-list> </person></address-book>
Schon mal vielen Dank
Jürgen Hagemann
--
Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann
Nepomuk Nestroy)
Gruß
Jürgen
[ Auf dieses Posting antworten ]
