2

現在、XSLT を使用して SVG 画像を別の画像に正常に変換できません。どういうわけか、画像に適用された XSLT ドキュメントは、テンプレートを適用するはずの rect-nodes を認識しません。少なくともそれは私が思うことです。

入力 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 ループを使用して、apply-templates なしでこのテンプレートを適用しようとしましたが、成功しませんでした。今、私はもう何を試すことができるのかわからないので、あなたに尋ねます.

4

1 に答える 1

3

XML ファイルはコンテンツを名前空間に配置しますが、XSLT にはその名前空間が宣言されていません。

  1. スタイルシートに追加xmlns:svg="http://www.w3.org/2000/svg"します。
  2. 変化する<xsl:apply-templates select="svg:svg/svg:rect"/>
  3. 変化する<xsl:template match="svg:rect">
于 2012-10-23T17:01:29.157 に答える