Announcement

Collapse
No announcement yet.

id dynamisch ändern

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

  • id dynamisch ändern

    Hallo,

    ich erzeuge durch eine rekursive Schleife verschiedene Rechtecke mit verschiedenen Texten. Das Problem ist, dass der erzeugte svg-Code immer die selbe id besitzt, was ja unzulässig ist. Gibt es die Möglichkeit, die id dynamisch mit xsl zu verändern?

    Code:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2000/svg">  
    	<xsl:output
    		method="xml" doctype-public="-//W3C//DTD SVG 1.0//EN" doctype-system="http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
            encoding="ISO-8859-1"
            media-type="image/svg+xml" 
            version="1.0" 
            indent="yes"/> 
            
    	<xsl:template match="/">
    		<xsl:processing-instruction 
    			name="xml-stylesheet">href="EB.css" type="text/css"
    		</xsl:processing-instruction>
    		<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="600" viewBox="0 0 1000 650"> 
    		<xsl:call-template name="fori">
    			<xsl:with-param name="myCounter" select="0"/>
    		</xsl:call-template>
    		</svg>
    	</xsl:template>
    	
    	<xsl:template name="fori">
    		<xsl:param name="myCounter"/>
    		
    		<!-- hochzaehlen für naechsten durchlauf -->
    		<xsl:variable name="mbCounter" select="$myCounter + 1"/>
    		  
    		<!-- ausgabe -->
    		<xsl:for-each select="ODX/VEHICLE-INFO-SPEC/VEHICLE-INFORMATIONS/VEHICLE-INFORMATION/LOGICAL-LINKS">
    			<xsl:choose>
    			<xsl:when test="LOGICAL-LINK[position()=$mbCounter]/LONG-NAME[contains(.,'Logical Link')] and 		LOGICAL-LINK[position()=$mbCounter]/LONG-NAME[contains(.,'KWP2000CAN20')]">
    				<xsl:variable name="fulltext" select="LOGICAL-LINK[position()=$mbCounter]/LONG-NAME"/>
    				<xsl:variable name="ohneLL" select="substring-after($fulltext,'Logical Link')"/>
    				<xsl:variable name="ohneKWP" select="substring-before($ohneLL,'KWP2000CAN20')"/>
    				<xsl:variable name="eins" select="substring($ohneKWP,1,11)"/>
    				<xsl:variable name="zwei" select="substring($ohneKWP, 12,11)"/>
    				<xsl:variable name="drei" select="substring($ohneKWP, 23)"/>
    			
    				<g id="bla" class="bla" transform="translate(29 162)">
    					<g id="bla.graphics">
    						<rect x="0" y="0" width="80" height="60"/>
    						<line x1="0" y1="60" x2="80" y2="0"/>
    					</g>
    					<g id="bla.name">
    						<text id="bla.Gateway.name.3" x="0" y="0" pointer-events="none" visibility="visible" transform="translate(40 19)">
    							<tspan x="0" dy="0" text-anchor="middle"><xsl:value-of select="$eins"/></tspan>
    							<tspan x="0" dy="15" text-anchor="middle"><xsl:value-of select="$zwei"/></tspan>
    							<tspan x="0" dy="15" text-anchor="middle"><xsl:value-of select="$drei"/></tspan>
    						</text>
    					</g>
    				</g>
    			</xsl:when>
    			</xsl:choose>
    		</xsl:for-each>
    		
    		<xsl:if test="$mbCounter &lt; 50"><!-- bis 50-->
    		  <!-- naechster(leider rekursiver) aufruf mit $myCounter+1 -->
    		  <xsl:call-template name="fori">
    			<xsl:with-param name="myCounter" select="$mbCounter"/>
    		  </xsl:call-template>
    		</xsl:if>
    	</xsl:template>
    </xsl:stylesheet>

  • #2
    Verwende die Positionsnummer innerhalb des xsl:for-each-Konstruktes als zusätzliches Kriterium, z. B.: id="bla{position()}".

    Comment

    Working...
    X