[XSLT] Speziellen Text isolieren
Klaus
- xsl
Hallo,
eine Frage zu XSLT. Was ich machen will:
Ich habe ein XML Document.
<document>
<report>
<comment>Hallo commentar. PB123</comment>
</report>
<report>
<comment>Hallo commentar. PB456</comment>
</report>
</document>
Was ich jetzt machen will ist, daß ein Teil des Textes (hier PBxxx) seperat ausgegeben will. Also es soll später im HTML Dokument eine Spalte (innerhalb einer Table) geben mit dem gesamten Comment und noch zusätzlich eine Spalte nur mit PBxxx.
Das Muster ist soweit gleich, daß nach PB 3 bis 4 Zahlen kommen die ich isolieren will. Wie bekomme ich das hin ?
Gruss Klaus
p.s. es geht mir nicht darum wie ich generell an den Kommentar rankomme. Soweit bin ich schon.
Hallo!
<document>
<report>
<comment>Hallo commentar. PB123</comment>
</report>
<document>
Das Muster ist soweit gleich, daß nach PB 3 bis 4 Zahlen kommen die ich isolieren will. Wie bekomme ich das hin ?
Folgendes Konstrukt liefert: PB123
concat('PB', substring-after(/document[1]/report[1]/comment[1], 'PB'))
Folgendes Konstrukt liefert: 'Hallo commentar.'
normalize-space(substring-before(/document[1]/report[1]/comment[1], 'PB'))
-> normalize-space() entfernt das Leerzeichen hinter dem Punkt.
Du mußt das jetzt natürlich noch auf Dein XSLT-Template anpassen und einsetzen. Zum Testen habe ich absolute Pfade verwendet.
Das ist XSLT 1.0. Mit XSLT 2.0 und der Funktion matches(), hätte man es "kürzer" lösen können.
André Laugks
Mit XSLT 2.0 und der Funktion matches(), hätte man es "kürzer" lösen können.
Hier muss ich mich noch einmal berichtigen. Mit matches() kann man nur auf wahr oder falsch testen. Man kann nichts "extrahieren".
André Laugks
Hallo,
Mit XSLT 2.0 und der Funktion matches(), hätte man es "kürzer" lösen können.
Hier muss ich mich noch einmal berichtigen. Mit matches() kann man nur auf wahr oder falsch testen. Man kann nichts "extrahieren".
»»
Das ist zwar richtig, aber man kann in matches() reguläre Ausdrücke verwenden:
matches(input, 'RegEx', 'option').
Grüße
Thomas
Hallo!
Das ist zwar richtig, aber man kann in matches() reguläre Ausdrücke verwenden:
matches(input, 'RegEx', 'option').
Was ich meinte, ich kann mit matches() keine Substitution durchführen.
André Laugks
Hallo André,
Das ist zwar richtig, aber man kann in matches() reguläre Ausdrücke verwenden:
matches(input, 'RegEx', 'option').Was ich meinte, ich kann mit matches() keine Substitution durchführen.
Ja, das ist korrekt. ;-)
Grüße
Thomas