Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11330[/thread]

Verständnis-Problem XML-Twig

Leser: 15


<< >> 6 Einträge, 1 Seite
nyjo
 2008-02-20 08:55
#106130 #106130
User since
2005-01-11
17 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Ich habe folgende XML-Struktur:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<Batch>
<Bescheinigung>
<Mandant>
.
.
</Mandant>
<Empfaenger>
<PersId>4444</PersId>
<Adresse>
<Name>Mustermann</Name>
<Vorname>Hans</Vorname>
<Strasse>Musterweg 4</Strasse>
<PLZ>4711</PLZ>
<Ort>Musterhausen</Ort>
</Adresse>
</Empfaenger>
<Vertragsinformation>
<Vertraege _camvt="array">
<Vertrag vertrag="4711">
<Art>keine Ahnung</Art>
<ErhalteneZulagen _camvt="array">
<ErhalteneZulage beitragsjahr="2002">
<Grundzulage>38,00</Grundzulage>
</ErhalteneZulage>
<ErhalteneZulage beitragsjahr="2003">
.
.
</ErhalteneZulagen>

</Vertrag>
<Vertrag vertrag="4712">
<Art>immer noch keine Ahnung</Art>
.
.
</Vertrag>
.
.
</Vertraege>
</Vertragsinformation>
</Bescheinigung>
<Bescheinigung>
.
.


Die Werte mit XML-Twig auszulesen ist kein Problem!
Probleme habe ich nur mit der Blockweisen Verarbeitung!
Z.B. Nach jeder Bescheinigung muss eine Excel-Datei mit folgenden Werten geschrieben werden:

Ergebnis soll sein:
Code: (dl )
1
2
3
4
PersId Vertrag Art          Beitragsjahr Grundzulage
4444 4711 keine Ahnung 2002 38
2003
4712 usw.

Bei mir sind die Zeilen meistens durcheinander geraten:
Code: (dl )
1
2
3
PersId Vertrag Art          Beitragsjahr Grundzulage
4444 4711 keine Ahnung 2002 38
4712 2003


Wie kann ich es handeln das nach jeder Bescheinigung eine Funktion aufgerufen wird,
in der z.B. Berechnungen bzw. das schreiben einer Excel-Datei erfolgt?
alles wird gut

---

mfg

Joachim Nyenhuis
renee
 2008-02-20 10:00
#106132 #106132
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dazu musst Du einen Handler für das schließende "Bescheinigung"-Tag schreiben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2008-02-20 10:13
#106133 #106133
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal etwas Code...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nyjo
 2008-02-20 10:50
#106134 #106134
User since
2005-01-11
17 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Handler für das schließende "Bescheinigung"-Tag schreiben
Wie definiere ich so einen Handler :-/

Hier der Source-Ausschnitt!

Propertie-Datei:
Code: (dl )
1
2
3
BAUMSTRUCT_1 = /Batch/Bescheinigung/Empfaenger
BAUMSTRUCT_2 = /Batch/Bescheinigung/Empfaenger/Adresse
.


Source:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $baum1   = $props->getProperty("BAUMSTRUCT_1");
my $baum2 = $props->getProperty("BAUMSTRUCT_2");
my $baum3 = $props->getProperty("BAUMSTRUCT_3");
my $baum4 = $props->getProperty("BAUMSTRUCT_4");

my $twig = new XML::Twig( twig_handlers => { $baum1 => \&getBaum1,
$baum2 => \&getBaum2,
$baum3 => \&getBaum3,
$baum4 => \&getBaum4
} );
$twig->parsefile( $opt_datei );
$twig->purge;


Funktion:
Sind alle identisch! außer getTreeField
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub getBaum1{ 
my( $twig, $tree)= @_;
my %hashTree = getTreeField(1);
my $sDummy = "";

$anzCol = 1;
$log->print( Dumper(\%hashTree)."\n" ) if $opt_debug;

foreach my $item ( sort keys %hashTree ){
if( defined($tree->first_child( $hashTree{$item} ))){
my $treeChild = $tree->first_child( $hashTree{$item} );
my $treetext = join '', map { $_->text if( $_->is_text || (exists $_->{'ent'})) } $treeChild->children;
$log->print($item.": ".$treetext."\n" ) if $opt_debug;
$sDummy = encode('iso-8859-1', $treetext );
my @keys = split('_', $item );
$fields{$keys[1]} = $sDummy;
}
$anzCol++;
}
if( $anzCol >= $anzSpalten ){
$log->print( "\n".Dumper(\%fields)."\n" );
&writeFile();
%fields = ();
}
}
alles wird gut

---

mfg

Joachim Nyenhuis
renee
 2008-02-20 11:07
#106135 #106135
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
perldoc XML:Twig
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
end_tag_handlers 
A hash { expression = \&handler}>. Sets element handlers that are called when the element is closed (at the end of the XML::Parser End handler). The handlers are called with 2 params: the twig and the tag of the element.

twig_handlers are called when an element is completely parsed, so why have this redundant option? There is only one use for end_tag_handlers: when using the twig_roots option, to trigger a handler for an element outside the roots. It is for example very useful to number titles in a document using nested sections:

my @no= (0);
my $no;
my $t= XML::Twig->new(
start_tag_handlers =>
{ section => sub { $no[$#no]++; $no= join '.', @no; push @no, 0; } },
twig_roots =>
{ title => sub { $_[1]->prefix( $no); $_[1]->print; } },
end_tag_handlers => { section => sub { pop @no; } },
twig_print_outside_roots => 1
);
$t->parsefile( $file);
Using the end_tag_handlers argument without twig_roots will result in an error.


Ich habe hier leider kein XML::Twig, so dass ich es nicht ausprobieren kann...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2010-05-06 20:56
#136896 #136896
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Move from Allgemeines zu Perl to Fragen zu Perl-Modulen
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 6 Einträge, 1 Seite



View all threads created 2008-02-20 08:55.