Announcement

Collapse
No announcement yet.

Ersetzen der Platzhalter mit richtigen Text

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

  • Ersetzen der Platzhalter mit richtigen Text

    Hallo,
    ich hab folgende Aufgabenstellung, weiß aber noch nicht wirklich wie ich das am besten angehen soll.
    Ich hab in einer xml Datei verschiedene Platzhalter definiert mit $
    diese will ich mit individuellen Texten je nach Bedarf füllen/ersetzen.
    Kann mir jemand nen tipp geben wie ich das problem am besten angehe?

    gru8 v1p0r

  • #2
    Hallo,

    du kannst folgendes Template benutzen:

    HTML Code:
    <xsl:template name="cr2br">
    	 <xsl:param name="text" />
    	 <xsl:variable name="textafterbreak" select="substring-after($text, 'PLATZHALTER')" />
    	 <xsl:choose>
    	  <xsl:when test="contains($text, '&#xA;')">
    	   <xsl:value-of select="substring-before($text, 'PLATZHALTER')" />
    	   DEIN TEXT
    	   <xsl:call-template name="cr2br">
    	   <xsl:with-param name="text" select="$textafterbreak" />
    	   </xsl:call-template>
    	  </xsl:when>
    	  <xsl:otherwise>
    	   <xsl:value-of select="$text" />
    	  </xsl:otherwise>
    	 </xsl:choose>
    	</xsl:template>
    Im Haupttemplate machst du:
    HTML Code:
    <xsl:call-template name="cr2br">
    					<xsl:with-param name="text" select="description" />
    				</xsl:call-template>
    Es sollte gehen.

    Robert

    Comment


    • #3
      danke ich werds mal ausprobieren! bin grad die replace funktion am testen da hab ich auch noch ein paar probleme!

      Comment


      • #4
        Hab jetzt mal versucht das Template zu implementieren aber bisher ohne erfolg.

        Hier mal mein Code. Das Template sollte jetzt eigentlich im Element Solution den Platzhalter $platform_url$ ersetzen durch die url www.test.de. Aber irgendwie macht er da nix. Hab mich eigentlich strickt an dein Beispiel gehalten. Zudem ist eine andere xslt datei eingebunden, die die Inhalte ausgibt und zuständig für die Formatierungen ist.



        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  match="content/instruction/solution">
                       <xsl:apply-imports/>
                       <xsl:call-template name="replace">
        			<xsl:with-param name="text" select="description" />
        		</xsl:call-template>
                 </xsl:template>
        
        
        <xsl:template name="replace">
        	 <xsl:param name="text" />
        	 <xsl:variable name="textafterbreak" select="substring-after($text, '\$platform_url\$')" />
        	 <xsl:choose>
        	  <xsl:when test="contains($text, '&#xA;')">
        	   <xsl:value-of select="substring-before($text, '$platform_url$')" />
        	   www.test.de
        	   <xsl:call-template name="replace">
        	   <xsl:with-param name="text" select="$textafterbreak" />
        	   </xsl:call-template>
        	  </xsl:when>
        	  <xsl:otherwise>
        	   <xsl:value-of select="$text" />
        	  </xsl:otherwise>
        	 </xsl:choose>
        	</xsl:template>
        
        </xsl:stylesheet>

        Zudem hab ich noch das Problem, dass ich mehrere Platzhalter definiert habe die in verschiedenen Elementen des XML Dokuments stehen.
        Jeder Platzhalter soll mit einem für ihn bestimmtem text ersetzt werden.
        Könnte ich das mit deinem Lösungsansatz umsetzen?

        Comment


        • #5
          Hi,

          1. kannst du hier das XML Posten?

          2. Ich fürchte, man muss das Replacement geziel einsetzen. Ansonsten probiere http://www.wer-weiss-was.de/app/service/board_navi?jump=193.5105136

          Robert

          Comment


          • #6
            ich könnte die anfangsstruktur posten bzw. Ausschnitte mit veränderten Textteilen


            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>Geben Sie die URL von $xxx$ ein.</exercise>
            		<solution>xxxxxxxxxxxx.</solution>
            	</instruction>
            ...
            
            ...
            Ich hab das gefühl das ich den Inhalt eines Elements bzw. Attributs in einem Parameter speichern muss?!?!

            Comment


            • #7
              OK.

              Da sind aber keine 'Neuen Zeilen'

              Oder gucke ich falsch?

              Robert

              Comment


              • #8
                was meinst du mit neuen Zeilen?

                Comment


                • #9
                  Damit meine ich den Beginn neuer Zeile - CRLF. Den wolltest Du doch ersetzen oder?

                  Comment


                  • #10
                    nein, wollte den Platzhalter ersetzen.
                    speziell hier im Element Solution den Platzhalter $platform_url$ ersetzen durch die url www.test.de. z.b.

                    Comment


                    • #11
                      Originally posted by v1p0r View Post
                      nein, wollte den Platzhalter ersetzen.
                      speziell hier im Element Solution den Platzhalter $platform_url$ ersetzen durch die url www.test.de. z.b.
                      OK. Dann musst du in dem Ersetzungstemplate alle '&#xA;' durch den Platzhaltter ersetzen.

                      Robert

                      Comment


                      • #12
                        ja super danke so hats geklappt!

                        Habe aber noch kleine Formatierungsprobleme! Der Output sieht jetzt so aus: </word:wordDocument>Geben Sie die URL
                        www.test.de
                        ein.

                        Der Text sollte eigentlich in einer Zeile stehen... und leider wie auch bei der replace funktion haut er mir die ausgabe am Ende vom Dok raus....

                        hier mein code:

                        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  match="/">
                                       <xsl:apply-imports/>
                                       <xsl:call-template name="replace"/>
                                 </xsl:template>
                        
                        
                        <xsl:template name="replace">
                        	 <xsl:param name="Solution">
                        	         <xsl:value-of select="content/instruction/solution"/> <!-- // XPath des Elements -->
                             </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$')"/>
                        	   www.test.de
                        	   <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>

                        Comment


                        • #13
                          Schön, dass es läuft.

                          Originally posted by v1p0r View Post
                          ja super danke so hats geklappt!

                          Habe aber noch kleine Formatierungsprobleme! Der Output sieht jetzt so aus: </word:wordDocument>Geben Sie die URL
                          www.test.de
                          ein.

                          Der Text sollte eigentlich in einer Zeile stehen... und leider wie auch bei der replace funktion haut er mir die ausgabe am Ende vom Dok raus....

                          hier mein code:

                          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  match="/">
                                         <xsl:apply-imports/>
                                         <xsl:call-template name="replace"/>
                                   </xsl:template>
                          
                          
                          <xsl:template name="replace">
                          	 <xsl:param name="Solution">
                          	         <xsl:value-of select="content/instruction/solution"/> <!-- // XPath des Elements -->
                               </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$')"/>
                          	   www.test.de
                          	   <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>

                          Wie sieht der Quellcode der Seite aus? Wird dort auch irgendwo ein
                          HTML Code:
                          <br/>
                          reingefumelt?

                          Roberrt

                          Comment


                          • #14
                            Nein es handelt sich bei der Ausgabe um ein WordDok... die Formatierungen werden mittels WordML definiert.
                            Aber wie gesagt er haut mir das ganze noch nicht an die richtige Stelle vom Dok.

                            Er haut mir das einfach am Ende des Dok raus
                            </word:wordDocument>Geben Sie die URL www.test.de ein.

                            Eigentlich sollte er den Absatz hier ersetzen bzw. den Text in word:t

                            Code:
                            <word:p>
                            			<w:pPr>
                            				<w:ind w:left="750"/>
                            				<w:rFonts w:ascii="Arial"/>
                            				<word:sz word:val="22"/>
                            			</w:pPr>
                            			<word:r>
                            				<word:t>1. Geben Sie die URL $platform_url$ ein.<w:br/></word:t>
                            			</word:r>
                            		</word:p>
                            Aber das Problem mit dem Platzhalter ist auf jeden Fall mal gelöst. Danke nochmal!

                            Comment


                            • #15
                              es sollte auf jeden Fall da kommen, wo
                              HTML Code:
                                   <xsl:call-template name="replace">
                              	                <xsl:with-param name="text" select="$textafterbreak"
                                   </xsl:call-template>
                              steht. Wenn das nicht so kommt, müsste man bisschen debuggen.

                              Comment

                              Working...
                              X