leere Listenelemente nach split()

stso

Mitglied
Hallo,
ich will aus einer vereinfachten xml- Struktur alle Elementinhalte (Ebene ist egal) hintereinander in eine Listen- Variable schreiben. Die vereinfachte XML- Struktur sieht so aus:

Code:
<eins>1</eins>
<zwei>2</zwei>
<drei>
    <dreiKommaZwei>3.2</dreiKommaZwei>
</drei>

ich habe folgenden Code probiert:

Code:
$xml = "<eins>1</eins><zwei>2</zwei><drei><dreiKommaZwei>3.2</dreiKommaZwei></drei>";
@xml = split(/<.*?>/,$xml);

Die Liste @xml sieht laut Eclipse EPIC- Debugger danach wie folgt aus:

( '', '1', '', '2', '', '', '3.2')

Neben den Werten an die ich ran möchte (1, 2, 3.2), sind in @xml eine Reihe von Listenelementen ohne Werte (''). Die will ich nicht haben! Diese leeren Werte entstehen, wenn ich das richtig vermute, immer dann wenn zwei Trennzeichen (Tags) unmittelbar aufeinander folgen.

Wie entsteht das erste leere Element?

Wie kann ich verhindern das diese leeren Elemente entstehen?
 
Hi.

Probier's mal so:
Perl:
@xml = split(/<.+?>(?!<)/, $xml);
Das erste Leerelement könntest du ja mit shift entfernen.

Gruß
 
Hi deepthroat,
danke für deine Antwort.
Wenn ich deinen Vorschlag anwende sieht die Liste so aus:

( '', 1, 2, 3.2</dreiKommaZwei>)

Vielleicht muss ich die Liste dann wirklich einfach nochmal durchlaufen und alle leeren Elemente entfernen.
 
Hi.
Hi deepthroat,
danke für deine Antwort.
Wenn ich deinen Vorschlag anwende sieht die Liste so aus:

( '', 1, 2, 3.2</dreiKommaZwei>)
Merkwürdig. Anscheinend funktioniert dein split anders als meins. Was hast du denn für eine Perl Version?
Vielleicht muss ich die Liste dann wirklich einfach nochmal durchlaufen und alle leeren Elemente entfernen.
Das wäre sicherlich eine Möglichkeit.

Gruß
 
Hi,

Merkwürdig. Anscheinend funktioniert dein split anders als meins. Was hast du denn für eine Perl Version?

ich benutze den ActivePerl- Interpreter (perl5.8.8.exe). Zumindestens hab ich diese .exe in den EPIC (Perl- Plugin für Eclipse)- Einstellungen angegeben.

Ich hab jetzt eben den cygwin- Perl Interpreter(5.8.8) ausprobiert - da funktioniert es.

Mmh, eigentlich wollte ich den ActivePerl- Interpreter nehmen - aber das werd ich mir wohl noch mal überlegen müssen.
 
Zurück