我目前無法使用XSLT實現SVG圖像到另一個SVG圖像的成功轉換。不知何故,應用於圖像的XSLT文檔無法識別它應該將模板應用於的rect節點,至少我認爲是這樣。用XSLT轉換SVG(謝爾賓斯基地毯)
輸入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>
我已經消除了我可能已經想到的錯誤的所有來源:
- 行內數學( - >變量)
- apply-templates中的錯誤節點選擇
- 錯誤的輸出方法
我甚至使用for-each循環適用不適用模板此模板嘗試過,但也沒有成功。現在我不知道我能再試一次,於是問你。
的東西,總之,不使用引擎收錄。我已更新你的帖子。 –