Partisan: replace string

Hallo ich hab im Netz ein Beispiel für ein replace string gefunden und angepasst! man muss dazu sagen ich bin neu in dem Thema Programmierung etc. und weiß jetzt nicht wirlich wie ich das am besten umsetzen kann.... wäre also dankbar um jede hilfe/tipp. Ich versuche definierte Platzhalter in meiner xml Datei zu ersetzen durch bestimmte strings. Jetzt hab ich aber in meiner xml Datei mehrere solcher Platzhalter definiert die ersetzten werden müssen. Wie kann ich das Beispiel so erweitern, dass ich mehrere Platzhalter ersetzen kann.

Hier meine xsl Datei

  
  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">  
<!-- <xsl:import href="testMLContent3.xslt"/> -->  
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
  
  
        <xsl:template  match="content">  
               <xsl:call-template name="replace-solution"/>  
             <!--  	<xsl:apply-imports/>  -->  
         </xsl:template>  
  
<!-- Hier wird das Template replace definiert -->  
<xsl:template name="replace-solution">  
<!-- Ein Parameter wird definiert der die inhalte von Solution beinhaltet-->  
	 <xsl:param name="Solution">  
	         <xsl:value-of select="instruction/solution"/>                <!-- // XPath des Elements -->  
     </xsl:param>  
     <!--  hier wird der String nach dem Platzhalter definiert   -->  
	 <xsl:variable name="textafterbreak" select="substring-after($Solution, '$platform_url$')"/>  
	 <xsl:choose>  
	      <!--  Wenn er den Platzhalter $platform_url$ findet ersetzt er diesen durch www.test.de  -->  
	  <xsl:when test="contains($Solution, '$platform_url$')">  
	   <xsl:value-of select="substring-before($Solution, '$platform_url$')"/>www.test.de<xsl:call-template name="replace-solution">  
	        <xsl:with-param name="Solution" select="$textafterbreak"/>  
	   </xsl:call-template>  
	  </xsl:when>  
	  <xsl:otherwise>  
	   <xsl:value-of select="$Solution"/>  
	  </xsl:otherwise>  
	 </xsl:choose>  
	</xsl:template>  
</xsl:stylesheet>  
  

hier ein Ausschnitt meiner xml Datei: Wie man sehen kann hab ich einmal den Platzhalter $platform_url$ und einmal den Platzhalter in einer anderen solution $platform$

  
<content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
	<instruction>  
		<language>DE</language>  
		<identifier>xxxx_01_01_10002</identifier>  
		<topic>access</topic>  
		<exercise>Geben Sie die URL von XXX ein.</exercise>  
		<solution>Geben Sie die URL $platform_url$ ein.</solution>  
	</instruction>  
         <instruction>  
		<language>DE</language>  
		<identifier>xxxx_01_01_10002</identifier>  
		<topic>access</topic>  
		<exercise>Wechseln Sie die Spracheinstellung von Deutsch auf Englisch und umgekehrt..</exercise>  
		<solution>Klicken Sie auf “Sprachauswahl” in der Top-Navigation von $platform$</solution>  
	</instruction>  
...  

  1. Hallo Sie Doppelposter,

    https://forum.selfhtml.org/?t=185381&m=1230044

    Wie kann ich das Beispiel so erweitern, dass ich mehrere Platzhalter ersetzen kann.

    <xsl:template name="replace-solution">
       <xsl:param name="Platzhalter" />
    ...
    <xsl:variable name="textafterbreak" select="substring-after($Solution, $Platzhalter)"/>
    xsl:choose
       <xsl:when test="contains($Solution, $Platzhalter)">
               <xsl:value-of select="substring-before($Solution, $Platzhalter)"/>

    ...

    und dann mit:
    <xsl:call-template name="replace-solution">
      <xsl:with-param name="Solution" select="$textafterbreak"/>
      <xsl:with-param name="Platzhalter" select="$Platzhalter"/>
    </xsl:call-template>

    bzw. mit
    <xsl:call-template name="replace-solution">
      <xsl:with-param name="Platzhalter" select="was-auch-immer"/>
    </xsl:call-template>

    aufrufen.

    Grüße
    Thomas

    1. Hallo Thomas, hat versucht dein Beispiel anzuwenden aber jetzt gibt er mir garnichts mehr aus.

      so sieht mein code jetzt aus:

        
      <xsl:stylesheet ......  
        
      	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
        
        
              <xsl:template  match="content">  
                    <xsl:call-template name="replace-solution">  
                           <xsl:with-param name="platform_url" select="www.test.de"/>  
                    </xsl:call-template>  
               </xsl:template>  
        
        
      <xsl:template name="replace-solution">  
      	 <xsl:param name="platform_url" />  
      	  <xsl:param name="Solution" >  
      	           <xsl:value-of select="instruction/solution"/>  
           </xsl:param>  
      	 <xsl:variable name="textafterbreak" select="substring-after($Solution, $platform_url)"/>  
      	 <xsl:choose>  
      	  <xsl:when test="contains($Solution, $platform_url)">  
      	          <xsl:value-of select="substring-before($Solution, $platform_url)"/>  
      	  </xsl:when>  
      	  <xsl:otherwise>  
      	   <xsl:value-of select="$Solution"/>  
      	  </xsl:otherwise>  
      	 </xsl:choose>  
      	</xsl:template>  
      </xsl:stylesheet>  
        
        
      
      

      grüße und danke für die schnelle antwort!

      1. Hallo,

        Hallo Thomas, hat versucht dein Beispiel anzuwenden aber jetzt gibt er mir garnichts mehr aus.

        so sieht mein code jetzt aus:

        <xsl:with-param name="platform_url" select="www.test.de"/>

          
          
        www.test.de ist doch ein String, also dann so:  
        <xsl:with-param name="platform\_url" select="'www.test.de'"/>  
          
        Grüße  
        Thomas  
          
          
        
        
        1. @@Thomas J.S.:

          www.test.de ist doch ein String

          Und www.test.de ist eine Domain der Stiftung Warentest, KEINE Beispieldomain!

          Für Beispieldomains sieht [RFC2606] example.com, example.net, example.org oder auch foo.example, foo.invalid vor. NIE Namen angeben, die wirklich existieren (können)!

          Live long and prosper,
          Gunnar

          --
          Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
        2. also das mit dem String hat mir schon weitergeholfen....
          nur leider ersetzt er mir den Platzhalter  $platform_url$ nicht durch www.test.de
          er gibt nur den ursprünglichen Solution Text aus:
          "Geben Sie die URL $platform_url$ ein."

          Dieser sollte eigentlich so aussehen "Geben Sie die URL www.test.de ein."

          1. Hallo,

            also das mit dem String hat mir schon weitergeholfen....
            nur leider ersetzt er mir den Platzhalter  $platform_url$ nicht durch www.test.de
            er gibt nur den ursprünglichen Solution Text aus:
            "Geben Sie die URL $platform_url$ ein."

            Dann machen wir es von vorne:

              
              
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">  
               <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
               <xsl:template  match="content">  
                  <xsl:call-template name="replace-solution">  
                     <xsl:with-param name="Platzhalter" select="'$platform_url$'"/>  
                  </xsl:call-template>  
               </xsl:template>  
               <xsl:template name="replace-solution">  
                  <xsl:param name="Platzhalter" />  
                  <xsl:param name="Solution">  
                     <xsl:value-of select="instruction/solution"/>  
                 </xsl:param>  
                 <xsl:variable name="textafterbreak" select="substring-after($Solution, $Platzhalter)"/>  
                 <xsl:choose>  
                    <xsl:when test="contains($Solution, $Platzhalter)">  
                       <xsl:value-of select="substring-before($Solution, $Platzhalter)"/>www.test.de<xsl:call-template name="replace-solution">  
                            <xsl:with-param name="Solution" select="$textafterbreak"/>  
                       </xsl:call-template>  
                    </xsl:when>  
                    <xsl:otherwise>  
                       <xsl:value-of select="$Solution"/>  
                    </xsl:otherwise>  
                 </xsl:choose>  
               </xsl:template>  
            </xsl:stylesheet>  
            
            

            Grüße
            Thomas

            1. Nachtrag ...

                
              <xsl:when test="contains($Solution, $Platzhalter)">  
                         <xsl:value-of select="substring-before($Solution, $Platzhalter)"/>www.test.de<xsl:call-template name="replace-solution">  
                              <xsl:with-param name="Solution" select="$textafterbreak"/>  
                              <xsl:with-param name="Solution" select="$Platzhalter"/>  
                         </xsl:call-template>  
                      </xsl:when>  
              
              
              1. Hallo Thomas, nochmal Danke für deine Bemühungen! ich habs jetzt endlich so hinbekommen wie es sein soll! ;-)

                Die Lösung sieht so aus:

                  
                  
                <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">  
                <!-- <xsl:import href="testMLContent3.xslt"/> -->  
                	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
                  
                <xsl:template name="replace">  
                <xsl:variable name="Solution">  
                <xsl:value-of select="."/>  
                </xsl:variable>  
                	 <xsl:choose>  
                	  <xsl:when test="contains($Solution, '$platform_url$')">  
                	  <xsl:variable name="textafterbreak" select="substring-after($Solution, '$platform_url$')"/>  
                	   <xsl:value-of select="substring-before($Solution, '$platform_url$')"/>www.test.de<xsl:value-of select="$textafterbreak"/>  
                	  </xsl:when>  
                	  <xsl:when test="contains($Solution, '$platform$')">  
                	  <xsl:variable name="textafterbreak" select="substring-after($Solution, '$platform$')"/>  
                	   <xsl:value-of select="substring-before($Solution, '$platform$')"/>xxx 8<xsl:value-of select="$textafterbreak"/>  
                	  </xsl:when>  
                	  <xsl:otherwise>  
                	   <xsl:value-of select="$Solution"/>  
                	  </xsl:otherwise>  
                	 </xsl:choose>  
                	</xsl:template>  
                </xsl:stylesheet>  
                  
                
                

                Diese replace xslt datei ist in meiner Hauptxsltdatei importiert worden. Zudem findet der call des Replace Template ebenfalls in der Hauptdatei statt.
                Also wie gesagt nochmal danke für deine Bemühungen!

                gruß Christian