Hallo miteinander,
seit gestern quäle ich mich mit dem Filter für Trennstriche und hoffe, hier auf gute Anregungen oder Tipps zu kommen.
Ich will folgende vier Problemfälle filtern:
- Klein- buch- stab- en -> Kleinbuchstaben (Minus & Leerzeichen weg)
- Groß- Buch- Stab- En -> Groß-Buch-Stab-En (Leerzeichen weg)
- Reinigungs- oder Hygienevorschrift -> Reinigungs- oder Hygienevorschrift (so belassen)
- Gedanken - Strich -> Gedanken - Strich (so belassen)
Dazu habe ich die einfache Testdatei:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text>
Klein- buch- stab- en
Funkt- ionale System- risiko- analyse
Projekt- organisa- tions- plan
Groß- Buch- Stab- En
Maschinen- Risiko- analyse
Ferti- gungs- Prüf- vor- schrift
und oder
Prozess- und Komponenten- manage- ment- plan
Reinigungs- oder Hygiene- vorschrift
Gedanken - Strich
Prozess- über- sicht - Stufe 2
Entwickler - Software
</text>
</root>
Für den Fall 1-3 funktioniert das folgende Skript ganz prima:
<xsl:template match="//text">
<root>
<xsl:variable name="fstChange">
<xsl:analyze-string select="." regex="-(
|\s|\n)([A-Z])">
<xsl:matching-substring>-<xsl:value-of select="regex-group(2)"/></xsl:matching-substring>
<xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:variable name="finalChange">
<xsl:analyze-string select="$fstChange" regex="-(
|\s|\n| )(and|und|oder|or )?">
<xsl:matching-substring>
<xsl:choose>
<xsl:when test="regex-group(2) = 'und'">- und</xsl:when>
<xsl:when test="regex-group(2) = 'oder'">- oder</xsl:when>
<xsl:when test="regex-group(2) = 'and'">- and</xsl:when>
<xsl:when test="regex-group(2) = 'or'">- or</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:value-of select="$finalChange"/>
</root>
</xsl:template>
Und für die Gedankenstriche klappt das hier:
<xsl:template match="//text">
<root>
<xsl:variable name="finalChange">
<xsl:analyze-string select="." regex="(
|\s|\n)-(
|\s|\n)">
<xsl:matching-substring><xsl:value-of select="regex-group(1)"/>-<xsl:value-of select="regex-group(2)"/></xsl:matching-substring>
<xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:value-of select="$finalChange"/>
</root>
</xsl:template>
Mein Problem ist nun, beides zusammenzupacken. Wenn ich alles in ein Template schreibe (mit der Variablen "secChange"), wird meine Gedankenstrich-Variable dennoch übergangen. Habt ihr eine Ahnung, warum? Oder gibt es eine elegantere Möglichkeit?
Bin für jeden Hinweis dankbar! Liebe Grüße, Janine