Announcement

Collapse
No announcement yet.

Problem mit replace funktion

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

  • Problem mit replace funktion

    Hallo
    ich hab eben mal die replace funktion ausprobiert... aber irgendwie ohne erfolg.
    Ich hab wie gesagt in der xml datei einen Platzhalter mit $ definiert ($für XXX (Plattformname)$). Dieser soll ersetzt werden in XXX8
    Der Platzhalter steht in der xml datei unter folgender Baumstruktur --> document/structure/units/unit im element <title>
    Aber es passiert leider nichts!


    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.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="testML_9.xslt"/>
         <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
         <xsl:template  match="/">
                <xsl:apply-imports/>
         </xsl:template>
           <xsl:template match="document/structure/units/unit/title"> 
               <xsl:value-of select="replace(.,'$für XXX (Plattformname)$', 'xxx8')"/>	
           </xsl:template>
    </xsl:stylesheet>

  • #2
    Der Suchstring wird als regulärer Ausdruck ausgewertet und $ ist ein reserviertes Zeichen, muss also durch \$ ausgedrückt werden. Das funktioniert:
    Code:
    <xsl:variable name="str" select="'$Platzhalter$'"/>
    <xsl:value-of select="replace($str,'\$Platzhalter\$','Ersatz')"/>

    Comment


    • #3
      Erstmal danke für die schnelle Antwort!
      Leider bringt mir Word 2003 beim transformieren immer die folgende Fehlermeldung:

      "replace ist keine gültige XSLT- oder XPath Funktion
      -->replace($str,'\$platform_url$','www.test.de')<--

      In dem Beispiel befindet sich der Platzhalter unter content/instruction/solution in der XML Datei

      Code:
      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="2.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:template>
                 <xsl:template match="content/instruction/solution">
      
                      <!-- hier wird die Textvariable definiert --> 
                     <xsl:variable name="str" select=" '$platform_url$' "/>
                     <xsl:value-of select="replace($str,'\$platform_url\$','www.test.de')"/>
                 
      	      </xsl:template>
      </xsl:stylesheet>
      Zuletzt editiert von v1p0r; 06.04.2009, 10:53.

      Comment


      • #4
        könnte es vielleicht daran liegen, das word 2003 die replace funktion nicht umsetzen kann?

        Comment


        • #5
          Word benutzt intern AFAIK den MSXML-Prozessor und kann nur XSLT/XPath 1.0 umsetzen. Suche ggf. nach einem alternativen replace-Template (gab es hier bereits). Vielleicht lässt sich auch ein externer Prozessor anbinden, dann wären Saxon oder AltovaXML geeignet.

          Comment


          • #6
            ich habs jetzt mal mit altova xml versucht! da scheint er es zu machen!
            aber beim transformieren zeigt er mir jetzt keine Inhalte mehr von solution an.
            man muss dazu sagen das ich zwei xsl dateien habe..
            eine dient dazu die inhalte und die formatierung zu gewährleisten und die die andere sollte eigentlich die Platzhalter ersetzen (replace.xslt)!

            die mit den inhalten&formatierungen ist in die replace.xslt eingebunden mit <xsl:import href ..../>
            und ausführen tu ich die replace.xslt
            aber dabei zeigt er mir jetzt keien inhalte mehr von solution an
            Zuletzt editiert von v1p0r; 06.04.2009, 14:23.

            Comment


            • #7
              bzw.
              Wenn ich es so mache schreibt er mir jetzt die url nicht an stelle des platzhalter sondern am ende des dokuments sprich nach </word:wordDocument>


              Code:
               
              
              <?xml version="1.0" encoding="UTF-8"?>
              <xsl:stylesheet version="2.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:variable name="textVariable" select="'$platform_url$'"/>
                             <xsl:value-of select="replace($textVariable,'\$platform_url\$', 'https://demo.de')"/>
                         </xsl:template>
              
              </xsl:stylesheet>
              Zuletzt editiert von v1p0r; 06.04.2009, 15:32.

              Comment


              • #8
                so ich habs jetzt mal so hinbekommen, dass er mir den Platzhalter ersetzt mit dem entsprechenden Wert. Ich musste den Inhalt des Elements Solution erst in einem Parameter speichern.
                Aber hier haut er mir wieder bei der output.xml alles am ende des Dokuments sprich hinter </word:wordDocument> raus

                Code:
                <?xml version="1.0" encoding="UTF-8"?>
                <xsl:stylesheet version="2.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="textVariable" select="$Solution"/>
                <xsl:value-of select="replace($textVariable,'\$platform_url\$', 'www.test.de')"/>
                	</xsl:template>
                </xsl:stylesheet>
                Zuletzt editiert von v1p0r; 07.04.2009, 15:31.

                Comment

                Working...
                X