我在服务器端代码中生成 XML 文件,并使用 XslCompiledTransform.Transform 将它们与外部 XSL 文件进行转换。
其中一个 XSL 文件的示例如下所示:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:param name='x' />
<xsl:param name='y' />
<xsl:param name='channel_number' />
<xsl:param name='sequence_colour' />
<xsl:param name='sequence_stroke' />
<xsl:template match='/Sensor'>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g transform="translate({$x},{$y})" id="S{$channel_number}">
<rect x="85" y="0" width="90" height="30" rx="10" fill="#FFFFFF" stroke="{$sequence_colour}" stroke-width="{$sequence_stroke}" />
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<rect x="20" y="55" width="220" height="95" fill="#F5F5FF" stroke="black" stroke-width="1" />
<rect x="20" y="80" width="30" height="40" fill="#FFFFFF" stroke="black" stroke-width="1" />
<line x1="20" y1="100" x2="50" y2="100" stroke="black" stroke-width="2" />
</g>
</svg>
</xsl:template>
</xsl:stylesheet>
当我对单个对象执行此操作时,它可以完美运行。
当我想在同一页面上显示两个或多个对象时,就会出现问题。它们不是彼此相邻出现,而是对象之间存在整个屏幕高度。
最终标记的示例如下:
<Root>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(170.5,40.5)" id="S1">
<rect x="85" y="0" width="90" height="30" rx="10" fill="#FFFFFF" stroke="black" stroke-width="1" />
<rect x="12" y="32" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<rect x="20" y="55" width="220" height="95" fill="#F5F5FF" stroke="black" stroke-width="1" />
<rect x="20" y="80" width="30" height="40" fill="#FFFFFF" stroke="black" stroke-width="1" />
<line x1="20" y1="100" x2="50" y2="100" stroke="black" stroke-width="2" />
</g>
</svg>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(570.5,40.5)" id="S2">
<rect x="85.5" y="0.5" width="90" height="30" rx="10" fill="#FFFFFF" stroke="black" stroke-width="1" />
<rect x="12.5" y="32.5" width="8" height="18" fill="#FFFFFF" stroke="black" stroke-width="1" />
<line x1="0.5" y1="40.5" x2="20" y2="40.5" stroke="black" stroke-width="1" />
<line x1="220.5" y1="110.5" x2="240" y2="110.5" stroke="black" stroke-width="1" />
<text x="95.5" y="80.5" font-family="sans-serif" font-size="20px" font-weight="bold" fill="black">S</text>
<circle cx="275.5" cy="110.5" r="15" stroke="black" stroke-width="2" fill="#FFFFFF" />
</g>
</svg>
</Root>
翻译中有正确的数字(170.5,40.5)和(570.5,40.5)。y 值是相同的,所以我希望 SVG 绘图彼此并排出现,但事实并非如此。
我认为这是由于有多个 SVG 标签,但我不知道如何克服这个问题,因为我正在从多个 XSL 文件进行转换。
编辑:它肯定有多个 SVG 标签。我复制了源 HTML,将其保存到文件中,编辑了额外的 SVG 标签,因此它只有顶部的 svg 标签和一个关闭的 svg 标签,并且完全按预期呈现。
如何将创建 HTML 的方式更改为只有一个 SVG 标签?