Thread XML::Twig - Element splitten (1 answers)
Opened by Alton at 2012-07-03 16:29

Gast Alton
 2012-07-03 16:29
#159543 #159543
Hallo!

Ich habe in einer xml-Datei folgende Daten:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<root>
<eintrag>
...
</eintrag>
<eintrag>
<kommentar name="blub">
<gesetz internal="name_gesetz">5 Anh 2</gesetz>
<paragraph internal="8">§ 8</paragraph>
<randnummer internal="37">37</randnummer>ff
<paragraph internal="5">§ 5</paragraph>
<randnummer internal="37">37</randnummer>ff
<paragraph internal="2">§ 2</paragraph>
<randnummer internal="9">9</randnummer>
</kommentar>
</eintrag>
<eintrag>
...
</eintrag>
</root>


Dies soll in diese Form überführt werden:

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
<root>
<eintrag>
...
</eintrag>
<eintrag>
<kommentar name="blub">
<gesetz internal="name_gesetz">5 Anh 2</gesetz>
<paragraph internal="8">§ 8</paragraph>
<randnummer internal="37">37</randnummer>ff
</kommentar>
<kommentar name="blub">
<paragraph internal="5">§ 5</paragraph>
<randnummer internal="37">37</randnummer>ff
</kommentar>
<kommentar name="blub">
<paragraph internal="2">§ 2</paragraph>
<randnummer internal="9">9</randnummer>
</kommentar>
</eintrag>
<eintrag>
...
</eintrag>
</root>


Jedes paragraph-Element mit direkt folgendem randnummer-Element und etwaigem zusätzlichen Text dahinter sollen in einem eigenen kommentar-Element eingekapselt werden.

Mit dem Code habe ich angefangen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub split_anh {
        my $root     = $twig->root();
        my @comments = $root->descendants('kommentar');
        foreach my $comment (@comments) {
                my $law = $comment->att('name');
                if ( $law eq 'blub' ) {
      my $child_count = $comment->children_count('paragraph'); # children zählen
      if ($child_count > 1) { # ein Splitting ist nur notwendig, wenn mehr als ein paragraph-Element im kommentar-Element vorhanden ist
      my $count = 0;
      while ($count < $child_count) {
       $count++;
       }
       print $count." Stück\n"; # nur zum Test
       
      }
    }
  }
}


Wie bekomme ich das hin? Ich habe schon versucht, das kommentar-Element zu kopieren und nach sich selbst einzufügen (hat funktioniert), um dann die überflüssigen Elemente darin und im Original abhängig von der Position (unter Abfrage des Counters) rauszulöschen (hat nicht funktioniert). Wahrscheinlich habe ich die Art und Weise, wie man die einzelnen children/siblings ansteuert, nicht wirklich verstanden oder etwas grundlegend falsch gemacht. >_>

Ich hab mit Perl im Allgemeinen und Twig im Speziellen noch nicht sooo viel gemacht, bisher aber mit etwas Geduld, O'Reilly-Büchern und Hirnschmalz eine Lösung gefunden. Aber hieran beiße ich mir seit ein paar Tagen die Zähne aus.
Last edited: 2012-07-03 16:49:54 +0200 (CEST)

View full thread XML::Twig - Element splitten