Announcement

Collapse
No announcement yet.

namespace-Angabe

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

  • namespace-Angabe

    Hallo @all,

    ich steh vor einem kleinen Problem. Ich möchte aus einer xml ein svg erstellen. Von der Sache her kein Problem. Ich lese aus dem Quellfile verschiedene Texte aus und bearbeite diese in einer Art Zählschleife (rekursiv). Diese Texte werden nun in ein Rechteck geschrieben. Dies geschieht alles in einem extra Template.
    In einem anderen Template rufe ich diese "Zählschleife" auf. Das Problem liegt jetzt darin, dass wenn ich die folgende Zeile

    Code:
    <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="600" viewBox="0 0 1000 650">
    folgendermaßen einfüge:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="EB.css" type="text/css"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    	<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" 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="Gateway" class="gateway" transform="translate(29 162)">
    					<g id="Gateway.graphics">
    						<rect x="0" y="0" width="80" height="60"/>
    						<line x1="0" y1="60" x2="80" y2="0"/>
    					</g>
    					<g id="Gateway.name">
    						<text id="GATEWAY.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>
    bekomme ich als ausgabe folgendes (nur ein Ausschnitt):

    Code:
    <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="600" viewBox="0 0 1000 650">
    	<g xmlns="" id="Gateway" class="gateway" transform="translate(29 162)">
    		<g xmlns="" id="Gateway.graphics">
    			<rect xmlns="" x="0" y="0" width="80" height="60"/>
    			<line xmlns="" x1="0" y1="60" x2="80" y2="0"/>
    		</g>
    		<g xmlns="" id="Gateway.name">
    			<text xmlns="" id="GATEWAY.Gateway.name.3" x="0" y="0" pointer-events="none" visibility="visible" transform="translate(40 19)">
    				<tspan xmlns="" x="0" dy="0" text-anchor="middle"> EnginContr</tspan>
    				<tspan xmlns="" x="0" dy="15" text-anchor="middle">Modul1 </tspan>
    				<tspan xmlns="" x="0" dy="15" text-anchor="middle"></tspan>
    			</text>
    		</g>
    	</g>
    hier müsste nun ein namespace (rot) angegeben werden. Wieso ist das nun nötig? Versteh ich nicht. Und wie kann ich in meiner XSL angeben, dass er den namespace dort automatisch zufügt?

  • #2
    Gib den Vorgabe-Namensraum beim xsl:stylesheet-Element an:

    Code:
    <xsl:stylesheet ... xmlns="http://www.w3.org/2000/svg" ...>
    Alle Elemente unterhalb des Wurzelelements werden somit automatisch dem verwendeten NS zugeordnet und die Ausgabe von xmlns="" unterbleibt. Das svg-Wurzelelement wird dann so im Stylesheet notiert:

    Code:
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ...>
    Der XLink-Namensraum wird für Verlinkungen oder Referenzierungen benötigt.

    Siehe auch dieses Beispiel.
    Zuletzt editiert von Thomas Meinike; 30.10.2007, 12:20.

    Comment


    • #3
      Vielen Dank,

      hat funktioniert und ergibt das was ich haben wollte. Wäre ich nie drauf gekommen:-)

      Comment

      Working...
      X