異なる「要素」にいくつかの定義済みの属性セットを設定する必要のある大きな「xsl:choose」チャンクがある場合。変数を格納して出力属性を使用する
私は実際には、「選択」の各ブランチの内側で一連の属性の定義を繰り返すのは好きではありません。 これらの属性を含む変数を使用して作業したいと思います。 メンテナンスが簡単で、エラーの余地が少ない...
これまでのところ、属性ノードを呼び出すことができませんでしたか? 私はそれらが単なるノードセットだと思ったので、copy-ofはそのトリックを行います。
しかし、それは私には何も出力されません。
これは属性ノードが実際に子ノードではないためですか?これはで行うことができない場合
しかし、XSLT 1.Oは私が直接それらに対処することはできません... <xsl:copy-of select="$attributes_body/@*/>
はここでエラー
を返しますが(元から減少)スタイルシートフラグメント
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="list">
<xsl:for-each select="figure">
<xsl:variable name="attributes_body">
<xsl:attribute name="chapter"><xsl:value-of select="@chapter"/></xsl:attribute>
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:variable>
<xsl:variable name="attributes_other">
<xsl:attribute name="chapter"><xsl:value-of select="@book"/></xsl:attribute>
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:variable>
<xsl:choose>
<xsl:when test="ancestor::body">
<xsl:element name="entry">
<xsl:copy-of select="$attributes_body"/>
<xsl:text>Body fig</xsl:text>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="entry">
<xsl:copy-of select="$attributes_other"/>
<xsl:text>other fig</xsl:text>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
ですXLST 1.0では2.0がこれを行うことができますか?
このヘルプを願っていました。属性からの入力データを変数に格納(および後で取得)したいですか?もしそうなら、入力XML/htmlは何ですか?もしそうなら、xsl:templateの代わりにxsl:variableを使いたいと思うでしょう。そして、使用しているネストされたxsl:変数が間違っています。だから、入力と期待される出力に加えて、変数ストア+検索のアプローチを追加してください。それから、より良いアドバイスをすることができます。 – Maestro13
@ Maestro13ドキュメント内のすべての 'figure'要素のリストを作成します。さまざまな条件に応じて、リストには事前設定された属性セットを持つ要素が含まれます。それらの属性は、ソース文書にある各「figure」要素に依存する値を持ちます。あなたを混乱させるかもしれないと思うのは、私が別のフィギュア要素を再放出したということでした。元のスタイルシートを編集して別の名前の要素を出力します。 –
@ Maestro13また、属性のセットを何度も繰り返したくないので、属性のセットを別の変数に格納したいと考えています。私はそれがあなたにもう少し明確になることを願っています。 –