使用xsl使用svg绘制XML点

时间:2013-12-10 18:52:15

标签: xml xslt svg

我是这些技术人员中的新手,我需要你的帮助。 我需要通过保存在xml文件中的svg点来绘制。我需要使用xsl进行转换。当我将使用任何常规浏览器即mozilla打开此xml时,我想将这些点绘制为圆圈。

用x和y坐标描述它们的位置。我使用了1000x1000px背景画布。请问您能告诉我这个脚本有什么问题,以及如何让它运行? 非常感谢你。

这是xml文件的示例:

<?xml version="1.0" ?>
<?xml-stylesheet href="points.xsl" type="text/xsl" ?>

<waypoints>
  <point>
    <X>20</X>
    <Y>20</Y>
  </point>
  <point>
    <X>50</X>
    <Y>50</Y>
  </point>
</waypoints> 

这就是我现在尝试在xsl文件中编写的内容:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg">

<xsl:output method="xml" indent="yes" standalone="no"
doctype-public="-//W3C//DTD SVG 1.1//EN"
doctype-system="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
media-type="image/svg" />

<xsl:template match="/">
  <xsl:for-each select="waypoints//point">
    <xsl:variable name="svg_cx" select="waypoints/point/X"/>
    <xsl:variable name="svg_cy" select="waypoints/point/Y"/>

    <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000" >
      <circle cx={$svg_cx} cy={$svg_cy} r="40" stroke="black" stroke-width="3" fill="red" />
    </svg>
  </xsl:for-each> 
</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

输出for-each之外的根元素并使用内部的相对路径:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2000/svg">
<xsl:output
method="xml"
indent="yes"
standalone="no"
doctype-public="-//W3C//DTD SVG 1.1//EN"
doctype-system="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
media-type="image/svg" />
<xsl:template match="/">
<svg width="1000" height="1000" >

<xsl:for-each select="waypoints//point">
  <circle cx="{X}" cy="{Y}" r="40" stroke="black" stroke-width="3" fill="red" />
</xsl:for-each>

</svg>
</xsl:template>
</xsl:stylesheet>