Announcement

Collapse
No announcement yet.

Code Generierung mit XSLT

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

  • Code Generierung mit XSLT

    Ich generiere C-Code mit xslt und einer XML Datei als Input. In der XML Datei stehen Namen von Variablen unterschiedlicher länge und Kommentare zu diesen Variablen.

    Meine Frage ist: Wie schaffe ich es das alle KOmmentare an der gleichen Stelle beginnen?

    Bsp.:

    type var1 = val1; // comment
    type varvarvar2 = val2; // comment

    sollte so aussehen:

    type var1 = val1;_________// comment
    type varvarvar2 = val2;____// comment

    (der Unterstrich steht hier stellvertretend für ein Leerzeichen).

    Gibt es eine Möglichkeit eine absolute (Spalten) Position in einer Zeile anzusteuern? Wäre es zb möglich die Länge der aktuellen Zeile in einer Variable abspeichern und dann noch die fehlende ANzahl von Leerzeichen entsprechend einer anderen Variable einzufügen?

  • #2
    Hier zwei versionsabhängige Ansätze zur Veranschaulichung des Prinzips (der Kommentar soll nach 25 Zeichen starten):

    XSLT/XPath 1.0

    Code:
    <xsl:template match="/">
    
      <xsl:call-template name="string_output">
        <xsl:with-param name="str" select="'Das ist ein Test.'"/>
        <xsl:with-param name="kom" select="'// Kommentar'"/>
        <xsl:with-param name="anz" select="25"/>
      </xsl:call-template>
    
    </xsl:template>
    
    
    <xsl:template name="string_output">
    
      <xsl:param name="str"/>
      <xsl:param name="kom"/>
      <xsl:param name="anz"/>
    
      <xsl:choose>
        <xsl:when test="string-length($str) &lt; $anz">
          <xsl:call-template name="string_output">
            <xsl:with-param name="str" select="concat($str,'&#xA0;')"/>
            <xsl:with-param name="kom" select="$kom"/>
            <xsl:with-param name="anz" select="$anz"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="concat($str,$kom)"/>
        </xsl:otherwise>    
      </xsl:choose>
    
    </xsl:template>
    XSLT/XPath 2.0

    Code:
    <xsl:template match="/">
    
      <xsl:variable name="str" select="'Das ist ein Test.'"/>
      <xsl:variable name="kom" select="'// Kommentar'"/>
      <xsl:variable name="anz" select="25"/>
    
      <xsl:value-of select="fn:concat($str,fn:string-join(for $i in (1 to $anz - fn:string-length($str)) return '&#xA0;',''),$kom)"/>
    
    </xsl:template>

    Comment

    Working...
    X