gpt4 book ai didi

xml - 使用 XSLT(谢尔宾斯基地毯)转换 SVG

转载 作者:行者123 更新时间:2023-12-04 05:27:26 24 4
gpt4 key购买 nike

我目前无法使用 XSLT 将 SVG 图像成功转换为另一个图像。不知何故,应用于图像的 XSLT 文档无法识别它应该将模板应用于的矩形节点,至少我是这么认为的。

输入 XML/SVG 很简单:

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg">
<rect x="0" y="0" width="720" height="720" fill="white"/>
</svg>

XSLT 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml"
encoding="UTF-8"
indent="yes"
doctype-system="-//W3C//DTD SVG 20000303 Stylable//EN"
doctype-public="http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd"
standalone="yes" />

<xsl:template match="/">
<xsl:apply-templates select="svg/rect"/>
</xsl:template>

<xsl:template match="rect">
<xsl:variable name="new-width" select="@width div 3"/>
<xsl:variable name="new-height" select="@height div 3"/>

<xsl:variable name="col1" select="@x"/>
<xsl:variable name="col2" select="@x + $new-width"/>
<xsl:variable name="col3" select="@x + (2 * $new-width)"/>

<xsl:variable name="row1" select="@y"/>
<xsl:variable name="row2" select="@y + $new-height"/>
<xsl:variable name="row3" select="@y + (2 * $new-height)"/>

<rect x="$col1" y="$row1" width="$new-width" height="$new-height" fill="white"/>
<rect x="$col2" y="$row1" width="$new-width" height="$new-height" fill="white"/>
<rect x="$col3" y="$row1" width="$new-width" height="$new-height" fill="white"/>

<rect x="$col1" y="$row2" width="$new-width" height="$new-height" fill="white"/>
<rect x="$col2" y="$row2" width="$new-width" height="$new-height" fill="black"/>
<rect x="$col3" y="$row2" width="$new-width" height="$new-height" fill="white"/>

<rect x="$col1" y="$row3" width="$new-width" height="$new-height" fill="white"/>
<rect x="$col2" y="$row3" width="$new-width" height="$new-height" fill="white"/>
<rect x="$col3" y="$row3" width="$new-width" height="$new-height" fill="white"/>
</xsl:template>

</xsl:stylesheet>

我已经消除了我能想到的所有错误来源:
  • 内联数学(-> 变量)
  • 应用模板中的节点选择错误
  • 错误的输出方式

  • 我什至尝试使用 for-each 循环在没有 apply-templates 的情况下应用此模板,但也没有成功。现在我不知道我可以再尝试什么,因此问你。

    最佳答案

    XML 文件将内容放置在命名空间中,而您的 XSLT 没有声明该命名空间。

  • 添加 xmlns:svg="http://www.w3.org/2000/svg"到您的样式表。
  • 更改 <xsl:apply-templates select="svg:svg/svg:rect"/>
  • 更改 <xsl:template match="svg:rect">
  • 关于xml - 使用 XSLT(谢尔宾斯基地毯)转换 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035011/

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