1

デジタル ビデオ カメラで生成された XML ファイルを使用しています。カメラを使用すると、ユーザーはカメラのすべての設定を SD カードに保存できるため、設定を呼び出したり、別のカメラにロードしたりできます。私が書いている XSL スタイルシートを使用すると、ユーザーは Web ブラウザーで SD カードに保存されたカメラの設定を表示できます。

私のスタイルシートでフォーマットされた XML ファイルの値のほとんどは人間にとって意味のあるものですが、そうでないものもあります。私がやりたいことは、XML ファイルの値に基づいているが、人間がより簡単に理解できるスタイルシート表示テキストを作成することです。

私のサンプル XML ファイルは、ここで見ることができます: http://josephthomas.info/Alexa/Setup_120511_140322.xml

ページの数行下に表示されます。

Color GAMMA-SxS    Rec_Log

「Rec_Log」はカメラが理解できる値ですが、カメラのユーザーが理解できる値ではありません。スタイルシートでやりたいことは、代わりに「LogC」を表示することです。

XML ファイルでは、この値は次のように定義されています。

<DteLut lowerLimit="0" upperLimit="2">Rec_Log</DteLut>

この値のサンプル ページをフォーマットする XSL は次のとおりです。

<tr>
  <td class="title_column">Color GAMMA-SxS</td><td><xsl:value-of select="Settings/Groups/Recording/DteLut"/>
  </td>
</tr>

そこで、Rec_Log ではなく「LogC」をページに表示したいと考えています。

「when」条件ステートメントが正しいアプローチのように思えますが、これを発生させる構文に十分に精通していません。XML ファイルには他にも置き換えが必要な値がありますが、上記は私の使命の良い例です。

4

2 に答える 2

0

私はデータ駆動型のアプローチを使用します。すべての翻訳を提供するマッピング ファイルを用意します。

<translations>
  <translate from="Rec_log" to="LogC"/>
  <translate .../>
</translations>

次にキーを定義します。

<xsl:key name="trans" match="translate" use="@from"/>

そして変更

<xsl:value-of select="Settings/Groups/Recording/DteLut"/>

<xsl:value-of select="key('trans', Settings/Groups/Recording/DteLut,
                          doc('translations.xml'))/@to"/>

XSLT 2.0 を使用している場合、または

<xsl:variable name="val" select="Settings/Groups/Recording/DteLut"/>
<xsl:for-each select="document('translations.xml')">
  <xsl:value-of select="key('trans', $val)/@to"/>
</xsl:for-each>

あなたが1.0で立ち往生している場合。

于 2012-06-19T11:24:29.287 に答える
0

あなたができることは、テンプレートマッチングを利用して、例外を変更したいものに一致させることです。まず、次のテンプレートを XSL に追加します。

<xsl:template match="DteLut[. = 'Rec_Log']">
   <xsl:text>LogC</xsl:text>
</xsl:template>

次に、次の行の代わりに

<xsl:value-of select="Settings/Groups/Recording/DteLut"/>

次の行を実行します

<xsl:apply-templates select="Settings/Groups/Recording/DteLut"/>

* DteLut *の値が "Rec_Log" の場合、カスタム テンプレートは一致して "LogC" を出力します。一致しない場合、デフォルトの動作が開始され、テキスト値がそのまま出力されます。

于 2012-06-19T11:17:01.953 に答える