gpt4 book ai didi

xml - 使用 XSLT 和 SVG 从 XML 创建条形图 - 缩放条形图

转载 作者:数据小太阳 更新时间:2023-10-29 02:08:24 26 4
gpt4 key购买 nike

我是 XSLT 和 SVG 的新手,已经进行了大量研究。我在这里看到了一些答案,这些答案看起来很接近我需要帮助的内容,但并不完全适合我。任何帮助将不胜感激。

我正在从 SQL 数据库中提取一个 XML 文件,如下所示:

<Report>
<Title>Step Status Sums Report</Title>
<RESULTS>
<ROW>
<PASSED>2784</PASSED>
<FAILED>73</FAILED>
<CAUTION>29</CAUTION>
<BLOCKED>27</BLOCKED>
<NOTRUN>3776</NOTRUN>
</ROW>
</RESULTS>
</Report>

通过在线项目管理工具,我只能使用 xslt 1.0 版和 SVG 转换此数据。

我想要的:一个简单的条形图(顺便说一句,这个数据会随着不同的项目而变化——所以不一定是这个特定的数据)。

这是我尝试过的方法,我知道这可能看起来像一个糟糕的结构,因为我正在尝试在网上跟踪看起来相似的东西。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns="http://www.w3.org/2000/svg">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/RESULTS">
<svg width="650" height="500">
<g id="axis" transform="translate(0 500) scale(1 -1)">
<line id="axis-y" x1="30" y1="20" x2="30" y2="450" style="fill:none;stroke:rgb(0,0,0);stroke-width:2"/>
<line id="axis-x" x1="30" y1="20" x2="460" y2="20" style="fill:none;stroke:rgb(0,0,0);stroke-width:2"/>
</g>
<xsl:for-each select="ROW">
<g id="bars" transform="translate(30 479) scale(1 -430)">
<rect x="30" y="0" width="50" height="{PASSED}" style="fill:rgb(81,223,13);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="100" y="0" width="50" height="{FAILED}" style="fill:rgb(224,12,12);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="170" y="0" width="50" height="{CAUTION}" style="fill:rgb(245,136,37);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="240" y="0" width="50" height="{BLOCKED}" style="fill:rgb(248,241,7);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="310" y="0" width="50" height="{NOTRUN}" style="fill:rgb(180,180,180);stroke:rgb(0,0,0);stroke-width:0"/>
</g>

<g id="ROW">
<rect id="PASSED" x="430" y="80" width="25" height="15" style="fill:rgb(81,223,13);stroke:rgb(0,0,0);stroke-width:1"/>
<rect id="FAILED" x="430" y="100" width="25" height="15" style="fill:rgb(224,12,12);stroke:rgb(0,0,0);stroke-width:1"/>
<rect id="CAUTION" x="430" y="120" width="25" height="15" style="fill:rgb(245,136,37);stroke:rgb(0,0,0);stroke-width:1"/>
<rect id="BLOCKED" x="430" y="140" width="25" height="15" style="fill:rgb(248,241,7);stroke:rgb(0,0,0);stroke-width:1"/>
<rect id="NOTRUN" x="430" y="160" width="25" height="15" style="fill:rgb(180,180,180);stroke:rgb(0,0,0);stroke-width:1"/>
</g>
<text id="PASSED-text" x="465px" y="92px" style="fill:rgb(0,0,0);font-size:18;font-family:Arial">
<xsl:value-of select="PASSED"/> - Passed </text>
<text id="FAILED-text" x="465px" y="112px" style="fill:rgb(0,0,0);font-size:18;font-family:Arial">
<xsl:value-of select="FAILED"/> - Failed </text>
<text id="key3-text" x="465px" y="132px" style="fill:rgb(0,0,0);font-size:18;font-family:Arial">
<xsl:value-of select="CAUTION"/> - Caution </text>
<text id="key4-text" x="465px" y="152px" style="fill:rgb(0,0,0);font-size:18;font-family:Arial">
<xsl:value-of select="BLOCKED"/> - Blocked </text>
<text id="key5-text" x="465px" y="172px" style="fill:rgb(0,0,0);font-size:18;font-family:Arial">
<xsl:value-of select="NOTRUN"/> - Not Run </text>
<g id="title">
<text x="325px" y="20px" style="text-anchor:middle;fill:rgb(0,0,0);font-size:24;font-family:Arial">
<xsl:value-of select="title"/> </text>
</g>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>

如图所示:enter image description here

钢筋没有拉到正确的高度。一切显然都没有正确缩放,我只是不知道该怎么做。

最佳答案

可能有更好的方法来做到这一点,但这里有一个快速修复:

<xsl:template match="/">

<xsl:variable name="max">
<xsl:for-each select="Report/RESULTS/ROW/*">
<xsl:sort select="." data-type="number" order="descending"/>
<xsl:if test="position()=1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:variable>

<svg width="650" height="500">
<g id="axis" transform="translate(0 500) scale(1 -1)">
<line id="axis-y" x1="30" y1="20" x2="30" y2="450" style="fill:none;stroke:rgb(0,0,0);stroke-width:2"/>
<line id="axis-x" x1="30" y1="20" x2="460" y2="20" style="fill:none;stroke:rgb(0,0,0);stroke-width:2"/>
</g>
<xsl:for-each select="Report/RESULTS/ROW">
<g id="bars" transform="translate(30 479) scale(1 -430)">
<rect x="30" y="0" width="50" height="{PASSED div $max}" style="fill:rgb(81,223,13);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="100" y="0" width="50" height="{FAILED div $max}" style="fill:rgb(224,12,12);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="170" y="0" width="50" height="{CAUTION div $max}" style="fill:rgb(245,136,37);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="240" y="0" width="50" height="{BLOCKED div $max}" style="fill:rgb(248,241,7);stroke:rgb(0,0,0);stroke-width:0"/>
<rect x="310" y="0" width="50" height="{NOTRUN div $max}" style="fill:rgb(180,180,180);stroke:rgb(0,0,0);stroke-width:0"/>
</g>
...

关于xml - 使用 XSLT 和 SVG 从 XML 创建条形图 - 缩放条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24765586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com