Schrift
[thread]10647[/thread]

Problem beim auslesen einer XML-Datei mit XML-Twig

Leser: 2


<< >> 4 Einträge, 1 Seite
nyjo
 2007-10-24 12:37
#101263 #101263
User since
2005-01-11
17 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ich versuche den Tag geburtsdatum mit XML-Twig auszulesen!

Ausschnitt XML-Datei:

Beispiel 1:
Code: (dl )
1
2
3
4
5
<NatuerlichePerson cx:dt="null" cx:ct="struct" _name="NatuerlichePerson">
<geburtsdatum _name="geburtsdatum">19.05.1949<cx:attrib>
<_index cx:dt="int">6</_index>
</cx:attrib>
</geburtsdatum>


Beispiel 2:
Code: (dl )
1
2
<NatuerlichePerson>
<geburtsdatum>19.05.1949</geburtsdatum>



Ausschnitt Source:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 my $twig = new XML::Twig( twig_handlers => {  $person   => \&getPerson,
$tarif => \&getTarif,
$adresse => \&getAdresse } );

$twig->parsefile( $export{ $docid }->[$FELDER{"XMLPFAD"}] );
.
.
.

sub getPerson{
my( $twig, $pers)= @_;
my %persTree = &getTreeFieldFromHash( $export{$merkDOCID}->[$FELDER{CATEGORYID}], "PERSON", %docsystree );

foreach my $item ( sort keys %persTree ){
if( defined($pers->first_child( $persTree{$item} ))){
$sDummy = encode('iso-8859-1',$pers->first_child( $persTree{$item} )->text);
print LOGFILE $FELDER{$item}."\n";
$export{$merkDOCID}->[$FELDER{$item}] = $sDummy;
}
}
}


Im Hash %persTree ist die Struktur gespeichert die ich auslesen möchte!

Beim auslesen des Tags geburtsdatum (Beispiel 1) erhalte ich immer den Wert
19.05.19496! Auslesen der Struktur wie in Beispiel 2 kein Thema.

Hat vielleicht einer eine Idee wie das handeln könnte das ich nur das Datum erhalte? :-/

mfg

Joachim Nyenhuis
alles wird gut

---

mfg

Joachim Nyenhuis
nyjo
 2007-10-25 12:58
#101310 #101310
User since
2005-01-11
17 Artikel
BenutzerIn
[Homepage] [default_avatar]
Die interne Struktur von TWIG sieht wie folgt aus:

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
'first_child' => bless( {
'next_sibling' => bless( {
'parent' => ${$VAR1}->{'first_child'}->{'next_sibling'},
'gi' => '52',
'prev_sibling' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'},
'first_child' => bless( {
'parent' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'next_sibling'},
'gi' => '53',
'first_child' => bless( {
'parent' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'next_sibling'}->{'first_child'},
'gi' => 0,
'pcdata' => '5'
}, 'XML::Twig::Elt' ),
'att' => {
'cx:dt' => 'int'
},
'last_child' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'first_child'}
}, 'XML::Twig::Elt' ),
'att' => {},
'last_child' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'next_sibling'}->{'first_child'}
}, 'XML::Twig::Elt' ),
parent' => ${$VAR1}->{'first_child'}->{'next_sibling'},
'gi' => 0,
'pcdata' => '05.09.1943'
}, 'XML::Twig::Elt' ),
'att' => {
'_name' => 'Geburtsdatum'
},
'last_child' => ${$VAR1}->{'first_child'}->{'next_sibling'}->{'first_child'}->{'next_sibling'}
}, 'XML::Twig::Elt' )


Verstehe aber nicht wieso
$pers->first_child( 'geburtsdatum' )->text
05.09.19435 als Ausgabe bringt :-/
alles wird gut

---

mfg

Joachim Nyenhuis
renee
 2007-10-25 13:30
#101312 #101312
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (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
#!/usr/bin/perl

use strict;
use warnings;
use XML::Twig;
use Data::Dumper;

my $content = do{ local $/; <DATA> };
my $twig = new XML::Twig( twig_handlers => {  'NatuerlichePerson'   => \&getPerson,} );

$twig->parse( $content );

sub getPerson{ 
  my( $twig, $pers)= @_;
  
  my $child = $pers->first_child( 'geburtsdatum' );
  #$child->cut_children;
  my $text = join '', map { $_->text if( $_->is_text || (exists $_->{'ent'})) } $child->children;
  print $text;
}

__DATA__
<NatuerlichePerson cx:dt="null" cx:ct="struct" _name="NatuerlichePerson">
                    <geburtsdatum _name="geburtsdatum">19.05.1949<cx:attrib>
                            <_index cx:dt="int">6</_index>
                        </cx:attrib>
                    </geburtsdatum>
                    </NatuerlichePerson>


ab Version 3.28 gibt's auch die Methode "text_only", was das join '',... macht...
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
 2007-10-25 13:48
#101313 #101313
User since
2005-01-11
17 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo renee,

superrrrr es funktioniert :-)
alles wird gut

---

mfg

Joachim Nyenhuis
<< >> 4 Einträge, 1 Seite



View all threads created 2007-10-24 12:37.