在XSLT程序中在SVG中的<text>标记(即打开和关闭<text>标记)之间传递XSLT变量

时间:2016-03-10 05:29:31

标签: xml xslt svg

我花了几天的时间试图弄清楚如何解决这个问题,我即将与大家分享。我们将非常感谢您的帮助。

所以,这个XML代码调用了我正在处理的以下XSLT代码片段。

<xsl:for-each select="roomname">
                        <xsl:variable name="rmnmstX" select="@startx" />
                        <xsl:variable name="rmnmstY" select="@starty" />
                        <xsl:variable name="rmnmenX" select="@endx" />
                        <xsl:variable name="rmnmenY" select="@endy" />
                        <xsl:variable name="rmnmname" select="@name" />


                            <text x="{$rmnmstX*$ts}" y="{$rmnmstY*$ts}" style="font-family: Verdana;
           font-size  : 5;
           stroke     : #0000ff;
           fill       : #0000ff;
           opacity    : 0.65">DC ROOM</text>

</xsl:for-each>

此处,在SVG text 标记之间我已经包含了文本 DC ROOM 我希望传递最后一个变量的值 rmnmname 取代 DC ROOM 。我尝试通过编写 {$ rmnmname} 代替 DC ROOM 来做到这一点,但是当我测试调用此XSLT代码的XML文档时,我看到 {$ rmnmname} ,而不是我在XML代码中传递的名称属性的值。我操作以测试输出的XML代码部分如下所示:

<roomname endx="5" endy="3" id="RM0002" startx="2" starty="2" name="DC ROOM 1"></roomname>

我希望我能够把这个传达给你们。

1 个答案:

答案 0 :(得分:1)

您可以使用xsl:value-of将XSL变量的值输出为文本节点:

.....
0.65"><xsl:value-of select="$rmnmname"/></text>
.....

如果您不打算在其他任何地方使用相同的值,只需从源XML变量中获取值:

.....
0.65"><xsl:value-of select="@name"/></text>
.....