我正在使用xsl样式表来输出嵌入了SVG图表的xsl:fo文档。
我无法从输入中获取数组,并将其拆分为几个较小的数组,存储在变量中,以便SVG模板可以应用于不同的数组以生成3个不同的图表。输入看起来像这样(请注意自定义ns):
<root xmlns="http://xml.mynamespace.com">
<data>
<list>
<item>
<id>1</id>
<title>Foo</title>
<score>10</score>
</item>
<item>
<id>2</id>
<title>Bar</title>
<score>6</score>
</item>
<item>
<id>3</id>
<title>Baz</title>
<score>16</score>
</item>
<item>
<id>4</id>
<title>Fizz</title>
<score>14</score>
</item>
<item>
<id>5</id>
<title>Buzz</title>
<score>7</score>
</item>
</list>
</data>
</root>
这些值可以分为3个不同的组。我试图将数组list
拆分为3个单独的变量,以便可以应用模板将它们转换为SVG图表。已知SVG变换适用于上面的数组,所以我认为问题是我尝试创建变量的方式。我尝试了几种不同的方法,但是我使用xsl:copy-of取得了最大的成功(如果你可以称之为)(再次,请注意ns):
<xslt:stylesheet xmlns:m="http://xml.mynamespace.com" version="1.0">
<xsl:variable name="group1">
<xsl:element name="m:list">
<xsl:copy-of select="/m:root/m:data/m:list/m:item[id <= 3]"/>
</xsl:element>
</xsl:variable>
</xslt:stylesheet>
然后稍后使用变量:
<xsl:apply-templates select="msxsl:node-set($group1)/m:list" />
我将它们放入变量的原因是因为创建SVG的模板需要以<list>
的格式输入一个或多个子item
元素。 SVG转换模板如下:
<xsl:template match="m:list">
<xsl:variable name="canvasHeight" select="28 * count(m:item)"/>
<svg height="{$canvasHeight}">
<xsl:for-each select="m:item">
<!-- Draw bar here -->
</xsl:for-each>
</svg>
</xsl:template>
当我尝试将变量转换为SVG时的输出表示正确创建了list
元素(因为模板匹配且输出了SVG元素)但item
元素不是&# 39; t复制,因为for-each似乎没有执行,输出高度为0.
我是否错误地创建了变量group1
?或者是否有一种更简单的方法可以将初始列表拆分为单独的变量?
答案 0 :(得分:1)
对于/m:root/m:data/m:list/m:item[Id <= 3]
,你只是在谓词中遇到了错误的情况(Id
与id
)和错误的命名空间(无对m:id
)。