Announcement

Collapse
No announcement yet.

Ersetzen der Platzhalter mit richtigen Text

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    wie kann ich das beispiel erweitern wenn ich jetzt mehrer Platzhalter ersetzen muss?

    Beispielsweise meine xml datei sähe so aus: Hier hätte ich einmal den Platzhalter $platform_url$ und den Platzhalter in einer anderen solution $platform$ beide müssen durch einen für sie bestimmtem Text ersetzen werden.

    Code:
    <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>
    ...
    Zuletzt editiert von v1p0r; 08.04.2009, 11:33.

    Comment


    • #17
      HTML Code:
      <xsl:template name="replace">
           <xsl:param name="Solution">
                   <xsl:value-of select="content/instruction/solution"/> <!-- // XPath des Elements -->
           </xslparam>
           <xsl:variable name="textafterbreak" select="substring-after($Solution, 'DEIN_PLATZHALTER')"/>
           <xsl:choose>
            <xsl:when test="contains($Solution, 'DEIN_PLATZHALTER')">
             <xsl:value-of select="substring-before($Solution, 'DEIN_PLATZHALTER')"/>
             DEINE ERSETZUNG
             <xsl:call-template name="replace">
             <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>
      sollte gehen

      Comment


      • #18
        danke für die schnelle Antwort aber ich konnte keine änderung feststellen!
        hierbei kann ich doch immer nur einen Platzhalter definieren?

        Comment


        • #19
          Sorry ich hab' wohl zu schnell gelesen und hab' das Wort 'mehrere' nicht gesehen.

          Wenn du mehrere Platzhalter hast, musst du das Template mehrmals anwenden.

          Gruß,

          Robert

          Comment


          • #20
            es ist zum verzweifeln. ich hab jetzt mal probiert den Platzhalter an einer anderen solution zu definieren.. Fettmarkiert sind aktueller und ehemaliger Platzhalter... der aktuelle ist gekennzeichnet durch $

            Code:
            <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>
            ...
            Das komische ist, dass er mir immer die erste Solution ausgibt..... aber eigentlich müsste er alle solutions die im XML Dokument vorkommen durchsuchen nach Platzhaltern und diese entsprechend ersetzen....


            angepasste xslt datei auf aktuellen Platzhalter:

            Code:
            <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="/">
                           <xsl:call-template name="replace"/>
                     </xsl:template>
            
            
            
            <xsl:template name="replace">
            	 <xsl:param name="Solution">
            	       <xsl:value-of select="content/instruction/solution"/>          
                 </xsl:param>
            	 <xsl:variable name="textafterbreak" select="substring-after($Solution, '$platform$')"/>
            	 <xsl:choose>
            	  <xsl:when test="contains($Solution, '$platform$')">
            	   <xsl:value-of select="substring-before($Solution, '$platform$')"/>XXX 8.0<xsl:call-template name="replace">
            	        <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>
            Der Output :

            Geben Sie die URL platform_url ein.


            Eigentlich sollte er aber diesen Text ausgeben:

            Klicken Sie auf “Sprachauswahl” in der Top-Navigation von XXX 8.0
            Zuletzt editiert von v1p0r; 08.04.2009, 13:31.

            Comment


            • #21
              so wie es aussieht geht er nicht über die erste Solution hinaus. Er sucht anscheind nur in der ersten Solution nach ob da ein Platzhalter definiert ist wenn nicht dann gibt er direkt den Text der ersten Solution raus. Die weiteren Solutions werden nicht berücksichtigt! ne idee woran das liegen könnte?

              Comment


              • #22
                Du musst in dem Haupttemplate, die Untertempletes nacheinander ausführen lassen.

                Comment


                • #23
                  dachte eigentlich das wär der Fall?!?!

                  Code:
                      <xsl:template  match="/">
                             <!--   <xsl:apply-imports/>  -->
                                 <xsl:call-template name="replace"/>
                           </xsl:template>

                  Comment


                  • #24
                    Das ist schon richtig. Du musst allerdings als Parameter die Zeichenkette übergeben die untersucht werden soll und den Aufruf machst du für jeden Platzhalter.

                    Man kann natürlich den Platzhalter als 2. Parameter übergeben.

                    Gruß,

                    Robert

                    Comment


                    • #25
                      hmm versteht ich nid wirklich! kannste mir das mal an nem Beispiel erläutern?
                      bzw. anhand meinem code

                      Comment


                      • #26
                        HTML Code:
                        <xsl:call-template name="replace">
                        					<xsl:with-param name="text" select="DEIN TEXT" />
                        				</xsl:call-template>
                        Und das mehrmals für jeden Platzhalter.

                        Gruß,

                        Robert

                        Comment


                        • #27
                          wofür steht das text? ich nehm an das is in meinem Beispiel Solution? da ich ja ein param mit solution definiert habe? und dein Text steht für den zu ersetzenden Platzhalter? also www.test.de?

                          hab das jetzt mal so angepasst aber leider gibt er mir jetzt nichts mehr aus

                          Code:
                                  <xsl:template  match="content">
                                <xsl:call-template name="replace">
                          					<xsl:with-param name="Solution" select="www.test.de" />
                          				</xsl:call-template>
                                   </xsl:template>
                          
                          
                          <xsl:template name="replace">
                          	 <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>

                          Comment


                          • #28
                            Hallo Robert, nochmal Danke für deine Bemühungen! ich habs jetzt endlich so hinbekommen wie es sein soll! ;-)

                            Die Lösung sieht so aus:

                            Code:
                            <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>
                            Dies 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

                            Comment

                            Working...
                            X