我们现在需要将istar的数据源文件转换为对应的图形显示,生成对应的svg(scalable vector graphics)显示,这一步可以当然也直接交给javascript处理,也可以使用xml转换语言xsl来尝试一下:
xsl完整文件如下:
  1istar生成 之 xsl转换<?xml version="1.0" encoding="UTF-8"?>
  2istar生成 之 xsl转换<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns="http://www.w3.org/2000/svg">
  3istar生成 之 xsl转换    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>        
  4istar生成 之 xsl转换    <xsl:template match="/">
  5istar生成 之 xsl转换    <!--在打开svg的时候,自动创建link的显示-->
  6istar生成 之 xsl转换        <svg onload="drawRelationships(evt)" width="100%" height="100%" version="1.1" id="istarSVG" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify">
  7istar生成 之 xsl转换        <script language="JavaScript" xlink:href="./istar.js"/>
  8istar生成 之 xsl转换    <!--指定javascript文件-->
  9istar生成 之 xsl转换            <defs>
 10istar生成 之 xsl转换        <!--自定义右键菜单-->
 11istar生成 之 xsl转换                <menu id="NewMenu">
 12istar生成 之 xsl转换                    <header>XML to IStar Tool Menu</header>
 13istar生成 之 xsl转换                    <item enabled="no">XML to IStar Tool Menu</item>
 14istar生成 之 xsl转换                    <separator/>
 15istar生成 之 xsl转换                    <item action="ViewSource">View Source</item>
 16istar生成 之 xsl转换                    <item action="SaveSnapshotAs">Save Diagram Asistar生成 之 xsl转换</item>
 17istar生成 之 xsl转换                    <separator/>
 18istar生成 之 xsl转换                    <item action="About">About SVG Viewer</item>
 19istar生成 之 xsl转换                </menu>
 20istar生成 之 xsl转换        <!--定义滤镜效果-->
 21istar生成 之 xsl转换                <filter id="DropShadowFilter" filterUnits="objectBoundingBox" x="-50%" y="-50%" width="200%" height="200%">
 22istar生成 之 xsl转换                    <feGaussianBlur in="SourceAlpha" stdDeviation="2" result="BlurAlpha"/>
 23istar生成 之 xsl转换                    <feOffset in="BlurAlpha" dx="4" dy="4" result="OffsetBlurAlpha"/>
 24istar生成 之 xsl转换                    <feMerge>
 25istar生成 之 xsl转换                      <feMergeNode in="OffsetBlurAlpha"/>
 26istar生成 之 xsl转换                      <feMergeNode in="SourceGraphic"/>
 27istar生成 之 xsl转换                    </feMerge>
 28istar生成 之 xsl转换                </filter>
 29istar生成 之 xsl转换        <!--定义istar需要的四种link的箭头-->
 30istar生成 之 xsl转换                <stroke="black" fill="none">
 31istar生成 之 xsl转换          <!--箭头实在独立的viewbox中的,其坐标系即相对于线条方向而定-->
 32istar生成 之 xsl转换                    <marker id = "DependencyMarker" viewBox = "0 0 40 40" refX = "35" refY = "20" markerUnits = "strokeWidth" markerWidth = "30" 
 33istar生成 之 xsl转换                            markerHeight ="10" stroke = "blue" stroke-width = "3" fill = "none" 
 34istar生成 之 xsl转换                            orient = "auto" preserveAspectRatio="xMidYMid meet">
 35istar生成 之 xsl转换                        <path d="M0,40 l0,-40 c15,10 15,30 0,40"/>
 36istar生成 之 xsl转换                    </marker>
 37istar生成 之 xsl转换                    <marker id = "MeanMarker" viewBox = "0 0 60 40" refX = "35" refY = "20" markerUnits = "strokeWidth" markerWidth = "30" 
 38istar生成 之 xsl转换                            markerHeight ="10" stroke = "blue" stroke-width = "3" fill = "none" 
 39istar生成 之 xsl转换                            orient = "auto" preserveAspectRatio="xMidYMid meet">
 40istar生成 之 xsl转换                        <path d="M0,0 v40 l60,-20 l-60,-20"/>
 41istar生成 之 xsl转换                    </marker>
 42istar生成 之 xsl转换                    <marker id = "DecompositionMarker" viewBox = "0 0 40 40" refX = "35" refY = "20" markerUnits = "strokeWidth" markerWidth = "30" 
 43istar生成 之 xsl转换                            markerHeight ="10" stroke = "blue" stroke-width = "3" fill = "none" 
 44istar生成 之 xsl转换                            orient = "auto" preserveAspectRatio="xMidYMid meet">
 45istar生成 之 xsl转换                        <path d="M0,0 v40"/>
 46istar生成 之 xsl转换                    </marker>
 47istar生成 之 xsl转换                    <marker id = "ContributionMarker" viewBox = "0 0 40 40" refX = "35" refY = "20" markerUnits = "strokeWidth" markerWidth = "30" 
 48istar生成 之 xsl转换                            markerHeight ="10" stroke = "blue" stroke-width = "3" fill = "none" 
 49istar生成 之 xsl转换                            orient = "auto" preserveAspectRatio="xMidYMid meet">
 50istar生成 之 xsl转换                        <path d="M0,0 l40,20 l-40,20"/>
 51istar生成 之 xsl转换                    </marker>
 52istar生成 之 xsl转换                </g>
 53istar生成 之 xsl转换            </defs>
 54istar生成 之 xsl转换      <!--定义背景框,主要是为了接收拖动时的处理函数-->
 55istar生成 之 xsl转换      <id="background" onmousemove="mouseMove()" onmouseup="mouseUp()" style="pointer-events: none;">
 56istar生成 之 xsl转换        <rect id="border" x="0" y="0" width="100%" height="100%" style="fill: none; stroke-width: 1px; stroke: #000000; shape-rendering: optimizeSpeed;" transform="scale(1,1)"/>
 57istar生成 之 xsl转换      </g>
 58istar生成 之 xsl转换            <fill="none" stroke="black" stroke-width="2">    
 59istar生成 之 xsl转换                <xsl:apply-templates select="*"/>
 60istar生成 之 xsl转换            </g>
 61istar生成 之 xsl转换      <id="controls" transform="scale(1,1)translate(0,0)">
 62istar生成 之 xsl转换        <rect x="260" y="10" rx="10" ry="10" width="100" height="100" style="fill:yellow;opacity:0.4;stroke:black;stroke-width:2;filter:url(#DropShadowFilter);"/>
 63istar生成 之 xsl转换        <image id="panUp" x="280" y="36" onclick="pan(0,-1)" width="19" height="13" xlink:href="./images/up.gif"/>
 64istar生成 之 xsl转换        <image id="panRight" x="300" y="50" onclick="pan(1,0)" width="13" height="19" xlink:href="./images/right.gif"/>
 65istar生成 之 xsl转换        <image id="panDown" x="280" y="70" onclick="pan(0,1)" width="19" height="13" xlink:href="./images/down.gif"/>
 66istar生成 之 xsl转换        <image id="panLeft" x="264" y="50" onclick="pan(-1,0)" width="13" height="19" xlink:href="./images/left.gif"/>
 67istar生成 之 xsl转换        <image id="zoomIn" x="314" y="36" onclick="zoom(1.2)" width="19" height="19" xlink:href="./images/zoomIn.gif"/>
 68istar生成 之 xsl转换        <image id="zoomOut" x="336" y="36" onclick="zoom(0.8)" width="19" height="19" xlink:href="./images/zoomOut.gif"/>
 69istar生成 之 xsl转换        <image id="reset" x="323" y="62" onclick="reset()" width="21" height="21" xlink:href="./images/reset.gif"/>
 70istar生成 之 xsl转换      </g>
 71istar生成 之 xsl转换        </svg>
 72istar生成 之 xsl转换    </xsl:template>
 73istar生成 之 xsl转换    <xsl:template name="recursion">
 74istar生成 之 xsl转换        <xsl:param name="actorindex"/>
 75istar生成 之 xsl转换        <xsl:param name="Ypos1"/>        
 76istar生成 之 xsl转换        <xsl:choose>
 77istar生成 之 xsl转换            <xsl:when test="$actorindex = 5">
 78istar生成 之 xsl转换                <xsl:variable name="prenum" select="count(/istar/actor[1]/goal)
 79istar生成 之 xsl转换                        + count(/istar/actor[1]/softgoal) + count(/istar/actor[1]/task)
 80istar生成 之 xsl转换                        + count(/istar/actor[1]/resource) + count(/istar/actor[1]/belief)
 81istar生成 之 xsl转换                        +count(/istar/actor[2]/goal)
 82istar生成 之 xsl转换                        + count(/istar/actor[2]/softgoal) + count(/istar/actor[2]/task)
 83istar生成 之 xsl转换                        + count(/istar/actor[2]/resource) + count(/istar/actor[2]/belief)
 84istar生成 之 xsl转换                        +count(/istar/actor[3]/goal)
 85istar生成 之 xsl转换                        + count(/istar/actor[3]/softgoal) + count(/istar/actor[3]/task)
 86istar生成 之 xsl转换                        + count(/istar/actor[3]/resource) + count(/istar/actor[3]/belief)
 87istar生成 之 xsl转换                        +count(/istar/actor[4]/goal)
 88istar生成 之 xsl转换                        + count(/istar/actor[4]/softgoal) + count(/istar/actor[4]/task)
 89istar生成 之 xsl转换                        + count(/istar/actor[4]/resource) + count(/istar/actor[4]/belief)"/>
 90istar生成 之 xsl转换                <xsl:variable name="Ypos2" select="$Ypos1 + format-number((($prenum) div 3), '#') * 150"/>
 91istar生成 之 xsl转换                <xsl:value-of select="$Ypos2"/>
 92istar生成 之 xsl转换            </xsl:when>
 93istar生成 之 xsl转换            <xsl:when test="$actorindex = 4">
 94istar生成 之 xsl转换                <xsl:variable name="prenum" select="count(/istar/actor[1]/goal)
 95istar生成 之 xsl转换                        + count(/istar/actor[1]/softgoal) + count(/istar/actor[1]/task)
 96istar生成 之 xsl转换                        + count(/istar/actor[1]/resource) + count(/istar/actor[1]/belief)
 97istar生成 之 xsl转换                        +count(/istar/actor[2]/goal)
 98istar生成 之 xsl转换                        + count(/istar/actor[2]/softgoal) + count(/istar/actor[2]/task)
 99istar生成 之 xsl转换                        + count(/istar/actor[2]/resource) + count(/istar/actor[2]/belief)
100istar生成 之 xsl转换                        +count(/istar/actor[3]/goal)
101istar生成 之 xsl转换                        + count(/istar/actor[3]/softgoal) + count(/istar/actor[3]/task)
102istar生成 之 xsl转换                        + count(/istar/actor[3]/resource) + count(/istar/actor[3]/belief)"/>
103istar生成 之 xsl转换                <xsl:variable name="Ypos2" select="$Ypos1 + format-number((($prenum) div 3), '#') * 150"/>
104istar生成 之 xsl转换                <xsl:value-of select="$Ypos2"/>
105istar生成 之 xsl转换            </xsl:when>
106istar生成 之 xsl转换            <xsl:when test="$actorindex = 3">
107istar生成 之 xsl转换                <xsl:variable name="prenum" select="count(/istar/actor[1]/goal)
108istar生成 之 xsl转换                        + count(/istar/actor[1]/softgoal) + count(/istar/actor[1]/task)
109istar生成 之 xsl转换                        + count(/istar/actor[1]/resource) + count(/istar/actor[1]/belief)
110istar生成 之 xsl转换                        +count(/istar/actor[2]/goal)
111istar生成 之 xsl转换                        + count(/istar/actor[2]/softgoal) + count(/istar/actor[2]/task)
112istar生成 之 xsl转换                        + count(/istar/actor[2]/resource) + count(/istar/actor[2]/belief)"/>
113istar生成 之 xsl转换                <xsl:variable name="Ypos2" select="$Ypos1 + format-number((($prenum) div 3), '#') * 150"/>
114istar生成 之 xsl转换                <xsl:value-of select="$Ypos2"/>
115istar生成 之 xsl转换            </xsl:when>
116istar生成 之 xsl转换            <xsl:when test="$actorindex = 2">
117istar生成 之 xsl转换                <xsl:variable name="prenum" select="count(/istar/actor[1]/goal)
118istar生成 之 xsl转换                        + count(/istar/actor[1]/softgoal) + count(/istar/actor[1]/task)
119istar生成 之 xsl转换                        + count(/istar/actor[1]/resource) + count(/istar/actor[1]/belief)"/>
120istar生成 之 xsl转换                <xsl:variable name="Ypos2" select="$Ypos1 + format-number((($prenum) div 3), '#') * 150"/>
121istar生成 之 xsl转换                <xsl:value-of select="$Ypos2"/>
122istar生成 之 xsl转换            </xsl:when>
123istar生成 之 xsl转换            <xsl:when test="$actorindex = 1">
124istar生成 之 xsl转换                <xsl:value-of select="$Ypos1"/>
125istar生成 之 xsl转换            </xsl:when>
126istar生成 之 xsl转换        </xsl:choose>
127istar生成 之 xsl转换    </xsl:template>
128istar生成 之 xsl转换    <xsl:template match="/istar/actor">
129istar生成 之 xsl转换        <xsl:param name="prenum" select="0"/>
130istar生成 之 xsl转换        <xsl:param name="actorindex" select="position()"/>
131istar生成 之 xsl转换        <xsl:param name="Ypos1" select="150 * position()"/>
132istar生成 之 xsl转换            <xsl:variable name="Ypos">
133istar生成 之 xsl转换                <xsl:call-template name="recursion">
134istar生成 之 xsl转换                    <xsl:with-param name="Ypos1" select="150 * position()"/>
135istar生成 之 xsl转换                    <xsl:with-param name="actorindex" select="position()"/>
136istar生成 之 xsl转换                </xsl:call-template>
137istar生成 之 xsl转换            </xsl:variable>
138istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)"  x="50" y="{$Ypos - 90}" height="100" width="100">            
139istar生成 之 xsl转换            <circle r="50" cx="100" cy="{$Ypos - 90}"/>
140istar生成 之 xsl转换            <path d="M 10 {$Ypos - 90 } L 190 {$Ypos - 90 }" stroke="none">
141istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('actor_', @ID)"/></xsl:attribute>
142istar生成 之 xsl转换            </path>
143istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
144istar生成 之 xsl转换                <textPath xlink:href="#{concat('actor_', @ID)}" startOffset="50%" dy="10">
145istar生成 之 xsl转换                    <xsl:value-of select="name"/>
146istar生成 之 xsl转换                </textPath>
147istar生成 之 xsl转换            </text>
148istar生成 之 xsl转换            <xsl:for-each select="./*">
149istar生成 之 xsl转换            <xsl:apply-templates select=".">
150istar生成 之 xsl转换                <xsl:with-param name="xOffset" select="((position() - 2) mod 3) * 200 + 240"/>
151istar生成 之 xsl转换                <xsl:with-param name="yOffset" select="format-number(((position()) div 3), '#') * 150 + $Ypos - 150 "/>
152istar生成 之 xsl转换            </xsl:apply-templates>
153istar生成 之 xsl转换            </xsl:for-each>
154istar生成 之 xsl转换        </g>
155istar生成 之 xsl转换    </xsl:template>
156istar生成 之 xsl转换    <xsl:template match="/istar/actor/goal">
157istar生成 之 xsl转换        <xsl:param name="xOffset"/>
158istar生成 之 xsl转换        <xsl:param name="yOffset"/>
159istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">    
160istar生成 之 xsl转换            <rect x="{$xOffset}" y="{$yOffset}" rx="30" ry="50" width="120" height="80"/>
161istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
162istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('innergoal_', @ID)"/></xsl:attribute>
163istar生成 之 xsl转换            </path>
164istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
165istar生成 之 xsl转换                <textPath xlink:href="#{concat('innergoal_', @ID)}" startOffset="50%" dy="10">
166istar生成 之 xsl转换                    <xsl:value-of select="name"/>
167istar生成 之 xsl转换                </textPath>
168istar生成 之 xsl转换            </text>
169istar生成 之 xsl转换        </g>    
170istar生成 之 xsl转换    </xsl:template>
171istar生成 之 xsl转换    <xsl:template match="istar/actor/softgoal">
172istar生成 之 xsl转换        <xsl:param name="xOffset"/>
173istar生成 之 xsl转换        <xsl:param name="yOffset"/>
174istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">    
175istar生成 之 xsl转换            <path d="M{$xOffset},{$yOffset+40} c0,-20 15,-40 30,-40 c15,10 45,10 60,0 c15,0 30,20 30,40
176istar生成 之 xsl转换    c0,20 -15,40 -30,40 c-15,-10 -45,-10 -60,0 c-15,0 -30,-20 -30,-40"/>
177istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
178istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('innersoftgoal_', @ID)"/></xsl:attribute>
179istar生成 之 xsl转换            </path>
180istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
181istar生成 之 xsl转换                <textPath xlink:href="#{concat('innersoftgoal_', @ID)}" startOffset="50%" dy="10">
182istar生成 之 xsl转换                    <xsl:value-of select="name"/>
183istar生成 之 xsl转换                </textPath>
184istar生成 之 xsl转换            </text>
185istar生成 之 xsl转换        </g>
186istar生成 之 xsl转换    </xsl:template>
187istar生成 之 xsl转换    <xsl:template match="istar/actor/task">
188istar生成 之 xsl转换        <xsl:param name="xOffset"/>
189istar生成 之 xsl转换        <xsl:param name="yOffset"/>
190istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">    
191istar生成 之 xsl转换            <path d="M{$xOffset},{$yOffset+40} l30,-40 h60 l30,40 l-30,40 h-60 l-30,-40"/>
192istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
193istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('innertask_', @ID)"/></xsl:attribute>
194istar生成 之 xsl转换            </path>
195istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
196istar生成 之 xsl转换                <textPath xlink:href="#{concat('innertask_', @ID)}" startOffset="50%" dy="10">
197istar生成 之 xsl转换                    <xsl:value-of select="name"/>
198istar生成 之 xsl转换                </textPath>
199istar生成 之 xsl转换            </text>
200istar生成 之 xsl转换        </g>
201istar生成 之 xsl转换    </xsl:template>
202istar生成 之 xsl转换    <xsl:template match="istar/actor/resource">
203istar生成 之 xsl转换        <xsl:param name="xOffset"/>
204istar生成 之 xsl转换        <xsl:param name="yOffset"/>
205istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">    
206istar生成 之 xsl转换            <rect x="{$xOffset}" y="{$yOffset}" width="120" height="80"/>
207istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
208istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('innerresource_', @ID)"/></xsl:attribute>
209istar生成 之 xsl转换            </path>
210istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
211istar生成 之 xsl转换                <textPath xlink:href="#{concat('innerresource_', @ID)}" startOffset="50%" dy="10">
212istar生成 之 xsl转换                    <xsl:value-of select="name"/>
213istar生成 之 xsl转换                </textPath>
214istar生成 之 xsl转换            </text>
215istar生成 之 xsl转换        </g>
216istar生成 之 xsl转换    </xsl:template>
217istar生成 之 xsl转换    <xsl:template match="istar/actor/belief">
218istar生成 之 xsl转换        <xsl:param name="xOffset"/>
219istar生成 之 xsl转换        <xsl:param name="yOffset"/>
220istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">    
221istar生成 之 xsl转换            <ellipse cx="{$xOffset+60}" cy="{$yOffset+40}" rx="60" ry="40"/>
222istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
223istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('innergoal_', @ID)"/></xsl:attribute>
224istar生成 之 xsl转换            </path>
225istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
226istar生成 之 xsl转换                <textPath xlink:href="#{concat('innergoal_', @ID)}" startOffset="50%" dy="10">
227istar生成 之 xsl转换                    <xsl:value-of select="name"/>
228istar生成 之 xsl转换                </textPath>
229istar生成 之 xsl转换            </text>
230istar生成 之 xsl转换        </g>
231istar生成 之 xsl转换    </xsl:template>
232istar生成 之 xsl转换    <xsl:template match="istar/actor/Mean-ends-link">
233istar生成 之 xsl转换    <from="{from/@ID}" to="{to/@ID}">
234istar生成 之 xsl转换      <path marker-mid = "url(#MeanMarker)" d="M0,0 l80,75 l80,75"/>
235istar生成 之 xsl转换    </g>
236istar生成 之 xsl转换    </xsl:template>
237istar生成 之 xsl转换    <xsl:template match="istar/actor/Contribution-link">
238istar生成 之 xsl转换    <from="{from/@ID}" to="{to/@ID}">
239istar生成 之 xsl转换      <path marker-end = "url(#ContributionMarker)" d="M0,0 l80,75 l80,75"/>
240istar生成 之 xsl转换    </g>
241istar生成 之 xsl转换    </xsl:template>
242istar生成 之 xsl转换    <xsl:template match="istar/actor/Decomposition-link">
243istar生成 之 xsl转换    <from="{from/@ID}" to="{to/@ID}">
244istar生成 之 xsl转换      <path marker-mid = "url(#DecompositionMarker)" d="M0,0 l80,75 l80,75"/>
245istar生成 之 xsl转换    </g>
246istar生成 之 xsl转换    </xsl:template>
247istar生成 之 xsl转换    <xsl:template match="istar/goal">
248istar生成 之 xsl转换        <xsl:param name="precount" select="position() - count(/istar/actor)"/>        
249istar生成 之 xsl转换        <xsl:param name="xOffset" select="(($precount + 1) mod 2) * 200 + 940"/>
250istar生成 之 xsl转换        <xsl:param name="yOffset" select="format-number(( ($precount + 1) div 2 ), '#') * 250 - 200"/>
251istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">
252istar生成 之 xsl转换            <rect x="{$xOffset}" y="{$yOffset}" rx="30" ry="50" width="120" height="80"/>
253istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
254istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('outgoal', @ID)"/></xsl:attribute>
255istar生成 之 xsl转换            </path>
256istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
257istar生成 之 xsl转换                <textPath xlink:href="#{concat('outgoal', @ID)}" startOffset="50%" dy="10">
258istar生成 之 xsl转换                    <xsl:value-of select="name"/>
259istar生成 之 xsl转换                </textPath>
260istar生成 之 xsl转换            </text>
261istar生成 之 xsl转换        </g>
262istar生成 之 xsl转换    </xsl:template>
263istar生成 之 xsl转换    <xsl:template match="istar/softgoal">
264istar生成 之 xsl转换        <xsl:param name="precount" select="position() - count(/istar/actor)"/>
265istar生成 之 xsl转换        <xsl:param name="xOffset" select="(($precount + 1) mod 2) * 200 + 940"/>
266istar生成 之 xsl转换        <xsl:param name="yOffset" select="format-number(( ($precount + 1) div 2 ), '#') * 250 - 200"/>    
267istar生成 之 xsl转换            
268istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">
269istar生成 之 xsl转换            <path d="M{$xOffset},{$yOffset+40} c0,-20 15,-40 30,-40 c15,10 45,10 60,0 c15,0 30,20 30,40
270istar生成 之 xsl转换    c0,20 -15,40 -30,40 c-15,-10 -45,-10 -60,0 c-15,0 -30,-20 -30,-40"/>
271istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
272istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('outgoal', @ID)"/></xsl:attribute>
273istar生成 之 xsl转换            </path>
274istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
275istar生成 之 xsl转换                <textPath xlink:href="#{concat('outgoal', @ID)}" startOffset="50%" dy="10">
276istar生成 之 xsl转换                    <xsl:value-of select="name"/>
277istar生成 之 xsl转换                </textPath>
278istar生成 之 xsl转换            </text>
279istar生成 之 xsl转换        </g>
280istar生成 之 xsl转换    </xsl:template>
281istar生成 之 xsl转换    <xsl:template match="istar/task">
282istar生成 之 xsl转换        <xsl:param name="precount" select="position() - count(/istar/actor)"/>
283istar生成 之 xsl转换        <xsl:param name="xOffset" select="(($precount + 1) mod 2) * 200 + 940"/>
284istar生成 之 xsl转换        <xsl:param name="yOffset" select="format-number(( ($precount + 1) div 2 ), '#') * 250 - 200"/>
285istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">
286istar生成 之 xsl转换            <path d="M{$xOffset},{$yOffset+40} l30,-40 h60 l30,40 l-30,40 h-60 l-30,-40"/>
287istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
288istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('outgoal', @ID)"/></xsl:attribute>
289istar生成 之 xsl转换            </path>
290istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
291istar生成 之 xsl转换                <textPath xlink:href="#{concat('outgoal', @ID)}" startOffset="50%" dy="10">
292istar生成 之 xsl转换                    <xsl:value-of select="name"/>
293istar生成 之 xsl转换                </textPath>
294istar生成 之 xsl转换            </text>
295istar生成 之 xsl转换        </g>
296istar生成 之 xsl转换    </xsl:template>
297istar生成 之 xsl转换    <xsl:template match="istar/resource">
298istar生成 之 xsl转换        <xsl:param name="precount" select="position() - count(/istar/actor)"/>
299istar生成 之 xsl转换        <xsl:param name="xOffset" select="(($precount + 1) mod 2) * 200 + 940"/>
300istar生成 之 xsl转换        <xsl:param name="yOffset" select="format-number(( ($precount + 1) div 2 ), '#') * 250 - 200"/>
301istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">
302istar生成 之 xsl转换            <rect x="{$xOffset}" y="{$yOffset}" width="120" height="80"/>
303istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
304istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('outgoal', @ID)"/></xsl:attribute>
305istar生成 之 xsl转换            </path>
306istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
307istar生成 之 xsl转换                <textPath xlink:href="#{concat('outgoal', @ID)}" startOffset="50%" dy="10">
308istar生成 之 xsl转换                    <xsl:value-of select="name"/>
309istar生成 之 xsl转换                </textPath>
310istar生成 之 xsl转换            </text>
311istar生成 之 xsl转换        </g>
312istar生成 之 xsl转换    </xsl:template>
313istar生成 之 xsl转换    <xsl:template match="istar/belief">
314istar生成 之 xsl转换        <xsl:param name="precount" select="position() - count(/istar/actor)"/>
315istar生成 之 xsl转换        <xsl:param name="xOffset" select="(($precount + 1) mod 2) * 200 + 940"/>
316istar生成 之 xsl转换        <xsl:param name="yOffset" select="format-number(( ($precount + 1) div 2 ), '#') * 250 - 200"/>
317istar生成 之 xsl转换        <id="{@ID}" onmousedown="mouseDown()" style="pointer-events:all;opacity:1.0;z-index:1;" transform="translate(0,0)" x="{$xOffset}" y="{$yOffset+40}" height="80" width="120">
318istar生成 之 xsl转换            <ellipse cx="{$xOffset+60}" cy="{$yOffset+40}" rx="60" ry="40"/>
319istar生成 之 xsl转换            <path d="M {$xOffset + 10 - 40} {$yOffset+40} L {$xOffset + 190 -40 } {$yOffset+40}" stroke="none">
320istar生成 之 xsl转换                <xsl:attribute name="id"><xsl:value-of select="concat('outgoal', @ID)"/></xsl:attribute>
321istar生成 之 xsl转换            </path>
322istar生成 之 xsl转换            <text text-anchor="middle" font-family="Verdana" font-size="10" fill="blue" stroke-width="0" startOffset="0">
323istar生成 之 xsl转换                <textPath xlink:href="#{concat('outgoal', @ID)}" startOffset="50%" dy="10">
324istar生成 之 xsl转换                    <xsl:value-of select="name"/>
325istar生成 之 xsl转换                </textPath>
326istar生成 之 xsl转换            </text>
327istar生成 之 xsl转换        </g>
328istar生成 之 xsl转换    </xsl:template>
329istar生成 之 xsl转换    <xsl:template match="istar/Dependency-link">
330istar生成 之 xsl转换    <from="{depender/@ID}" to="{dependee/@ID}">
331istar生成 之 xsl转换      <path marker-mid = "url(#DependencyMarker)" d="M0,0 l80,75 l80,75"/>
332istar生成 之 xsl转换    </g>
333istar生成 之 xsl转换    </xsl:template>
334istar生成 之 xsl转换    <xsl:template match="//name">
335istar生成 之 xsl转换    </xsl:template>
336istar生成 之 xsl转换</xsl:stylesheet>
337istar生成 之 xsl转换

不注释了。。stomach began to hurt...

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-16
  • 2022-02-09
  • 2021-09-20
  • 2021-07-07
  • 2021-07-06
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-09
  • 2021-11-27
  • 2021-05-24
  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案