Claus Hilgermann: translate() - aber nur Teile eines Textes

Ich bin Anfänger. Daher nicht böse sein wenn die Antwort "zu" einfach ist.

Ich habe diese XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="trans_01.xsl"?>

<a>
    <b>
        DER GEMEINE WOLF IST FRIEDLICH.
    </b>
</a>

Und diese XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html"/>
<xsl:template match="/" >
<html>
    <head>
        <title></title>
    </head>
    <body>
        <xsl:value-of select="translate(.,'WOLF','Wolf')"/>
    </body>
</html>
</xsl:template>
</xsl:stylesheet>

Und ich möchte das der gesamte Text ausgegeben wir. Alles ausser dem Wolf soll weiterhin in Grossbuchstaben sein. Wie bekomme ich das hin?

  1. Hallo Claus,

    <xsl:value-of select="translate(.,'WOLF','Wolf')"/>
    ...
    Und ich möchte das der gesamte Text ausgegeben wir. Alles ausser dem Wolf soll weiterhin in Grossbuchstaben sein. Wie bekomme ich das hin?

    Verwende ein Replace-Template oder kompakt

    fn:replace(.,'WOLF','Wolf')

    falls der Prozessor XSLT/XPath 2.0 unterstützt.

    Grüße,
    Thomas

    1. falls der Prozessor XSLT/XPath 2.0 unterstützt.

      Der würde es schon unterstützen. Ich lerne für eine Klausur und die behandelt nur XPath 1.0. Kann sein das es nur über einen sehr komplizierten Aufbau geht?

      1. Hallo Claus,

        Ich lerne für eine Klausur und die behandelt nur XPath 1.0. Kann sein das es nur über einen sehr komplizierten Aufbau geht?

        Kompliziert nicht, eher etwas anspruchsvoll.

        Ein einfaches Suchen/Ersetzen funktioniert so:

        <xsl:variable name="text" select="'DER GEMEINE WOLF IST FRIEDLICH.'"/>  
        <xsl:variable name="suche" select="'WOLF'"/>  
        <xsl:variable name="ersatz" select="'Wolf'"/>  
          
        <xsl:value-of select="concat(substring-before($text, $suche), $ersatz, substring-after($text, $suche))"/>
        

        Mehrfaches Suchen/Ersetzen läuft auf ein rekursiv aufgerufenes Template hinaus wie in der genannten Quelle ersichtlich.

        Grüße,
        Thomas

  2. Nun ja, ich weiss nicht wie die Aufgabe konkret ausschaut, aber es geht auch so und benötigt nicht xslt2.0:

    <xsl:value-of select="concat(substring-before(.,'WOLF','Wolf',substring-after(.,'WOLF'))"/>

    Gruß, H.

    1. Etwas fehlte:

      <xsl:value-of select="concat(substring-before(.,'WOLF'),'Wolf',substring-after(.,'WOLF'))"/>

      Gruß, H.