Klaus: Leerzeichen zwischen Wörtern entfernen?

Hallo,

Ich erzeuge eine Referenznummer, die allerdings ohne Leerzeichen dargestellt werden muss, damit diese vollständig akzeptiert wird.

  
	<fo:block>Referenz-Nr.: 2063-  
		<fo:inline>  
			<xsl:value-of select="//Contract/ContractNumber"/>  
		</fo:inline>  
		-00  
	</fo:block>  

Bei mir wird folgende Ausgabe erzeugt: Referenz-Nr.: 2063- 123456 -00

Wie bekomme ich die Leerzeichen nur innerhalb der Nummer weg?
Ich habe es mit word-spacing="0" beim fo:inline versucht und auch mit padding-left und padding-right.

Das <fo-inline> soll ja auch dazu in der Lage sein, einzelne Zeichen eines Wortes zu verändern, im Internet finde ich aber nur Beispiele für ganze Wörter.

Klaus

  1. Hallo Klaus,

    Wie bekomme ich die Leerzeichen nur innerhalb der Nummer weg?

    Probiere es so:

    <fo:block>  
      <fo:inline>  
        <xsl:text>Referenz-Nr.: 2063-</xsl:text>  
        <xsl:value-of select="normalize-space(//Contract/ContractNumber)"/>  
        <xsl:text>-00</xsl:text>  
      </fo:inline>  
    </fo:block>
    

    Grüße,
    Thomas

    1. Hallo Thomas,

      <xsl:value-of select="normalize-space(//Contract/ContractNumber)"/>

      hat leider auch nicht funktioniert. Aber beide von Siri genannte Lösungen funktionieren.
      Dennoch vielen Dank.

      Klaus

      1. Hallo Klaus,

        <xsl:value-of select="normalize-space(//Contract/ContractNumber)"/>

        hat leider auch nicht funktioniert. Aber beide von Siri genannte Lösungen funktionieren.

        Das allein bringt es natürlich nicht, sondern nur, wenn in diesem Elementinhalt überzähliger Leerraum zu eliminieren sind (am Anfang und am Ende sowie Reduktion dazwischen auf jeweils eins). Ansonsten entspricht die zusätzliche Nutzung von xsl:text dem Ansatz von Siri. Zumindest Saxon erzeugt die Umbrüche vor/nach xsl:text erwartungsgemäß nicht in der Ausgabe.

        Grüße,
        Thomas

        1. Hallo,

          Das allein bringt es natürlich nicht, sondern nur, wenn in diesem Elementinhalt überzähliger Leerraum zu eliminieren sind (am Anfang und am Ende sowie Reduktion dazwischen auf jeweils eins).

          Ich glaube, du hast dich von der Fragestellung ins Boxhorn jagen lassen. Es geht ja gar nicht darum, den Leerraum eines Elementeninhalts zu eliminieren, sondern um das Zusammensetzen einer Zeichenkette aus Strings und Elementeninhalt. Der Umbruch im OP hat vermutlich beim Transformer für ein Leerzeichen gesorgt.

          Viele Grüße
          Siri

          1. Hallo Siri,

            Ich glaube, du hast dich von der Fragestellung ins Boxhorn jagen lassen. Es geht ja gar nicht darum, den Leerraum eines Elementeninhalts zu eliminieren, sondern um das Zusammensetzen einer Zeichenkette aus Strings und Elementeninhalt. Der Umbruch im OP hat vermutlich beim Transformer für ein Leerzeichen gesorgt.

            Doch, habe ich durchaus verstanden. Allerdings war vom Elementinhalt nur die Ausgabe bekannt, insofern hätten auch Zeilenumbrüche innerhalb des Textknotens enthalten sein können. Insofern kann normalize-space() zumindest nicht schaden.

            Zudem habe ich den gezeigten Code auch mit Saxon ausprobiert und das gewünschte Ergebnis erhalten, wobei das fo:inline-Element nicht zwingend nötig, aber eben bei Inline-Ausgaben auch vorteilhaft ist. Kann sein, dass die Transformation via FOP (vor der Formatierung) laxer mit Leerraum umgeht.

            Ich benutze zudem erst Saxon für die FO-Erstellung und nur im zweiten Schritt FOP bzw. Antenna House.

            Grüße,
            Thomas

  2. Hallo,

    <fo:block>Referenz-Nr.: 2063-<xsl:value-of select="//Contract/ContractNumber"/>-00  
    </fo:block>
    

    oder

    <fo:block><xsl:value-of select="concat('Referenz-Nr.: 2063-',//Contract/ContractNumber,'-00')"/>  
    </fo:block>
    

    Viele Grüße
    Siri

    1. Hallo Siri,

      fo:blockReferenz-Nr.: 2063-<xsl:value-of select="//Contract/ContractNumber"/>-00

      </fo:block>

      
      >   
        
      Beide Versionen haben funktioniert. Die erste Methode hat mir aber am Besten gefallen.  
      Damit spare ich an einigen anderen Stellen auch das <fo:inline> ;-))  
      Vielen lieben Dank.  
        
        
      Klaus