【发布时间】:2019-06-19 16:22:58
【问题描述】:
我正在尝试从我的 XML 文档中的值创建一个 SVG 折线图。到目前为止,我已经制作了图表,但我无法从 XML 文档中正确检索值。下面是图表的当前状态:
该图表旨在显示每月平均天气温度,因此应在边缘较低而在中心达到峰值。
这是我的 XML 代码:
<xml>
<graph2>
<averageHighTemperatures>
<January>8.3</January>
<February>8.5</February>
<March>11.1</March>
<April>13.5</April>
<May>17.1</May>
<June>20.0</June>
<July>22.6</July>
<August>22.5</August>
<September>19.3</September>
<October>15.3</October>
<November>11.2</November>
<December>9.1</December>
</averageHighTemperatures>
</graph2>
</xml>
这是我的 XSL 代码:
<svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 500 100" class="chart">
<xsl:variable name="max">
<xsl:for-each select="xml/graph2/averageHighTemperatures/*">
<xsl:sort select="." data-type="number" order="descending"/><xsl:if test="position()=1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="xml/graph2/averageHighTemperatures">
<polyline
fill="none"
stroke="#0074d9"
stroke-width="3"
points="0,{January div $max}
20,{February div $max}
40,{March div $max}
60,{April div $max}
80,{May div $max}
100,{June div $max}
120,{July div $max}
140,{August div $max}
160,{September div $max}
180,{October div $max}
200,{November div $max}
220,{December div $max}"/>
</xsl:for-each>
</svg>
我假设底部每个循环的 XSL 是问题的根源,但我不确定在绘制点时如何正确使用该变量。
提前致谢
【问题讨论】:
-
您的问题是关于 XSLT 还是关于 SVG? IOW,您确切知道生成的 SVG 代码应该是什么吗?
-
@michael.hor257k 我不确定 SVG 代码,但它应该看起来像这样:'points="0,100 20,90 40,80 60,70 80,50 100,40 120, 20 140,25 160,30 180,50 200,70 220,90"' 我认为问题是尝试使用 XSL 收集 XML
-
我认为您有很多问题,不可能一次全部回答。我建议您首先找出确切 XSL 转换的结果应该是什么。不仅仅是点值,还有 SVG 代码中的一切。然后 - 而不是之前 - 询问如何通过 XSLT 产生所需的结果。