XSLTファイルを作成しています。 私はXMLファイルから値をとる変数を1つ持っています。しかし、xmlに値の参照がなく、その時点でXSL変数がFalse/None(わからない)を返すことがあります。変数に値がない場合は、デフォルト値を使用します。 どうすればいいですか?質問に与えられたいくつかの詳細をXSLTで変数の値がわかるかどうか
答えて
、あなたがすることができる最も簡単なテストでは、次のとおりです。
<xsl:if test="$var">
...
</xsl:if>
それとも、他のケースのための出力を提供したい場合は、xsl:choose
を使用する可能性があります:
<xsl:choose>
<xsl:when test="not($var)"> <!-- parameter has not been supplied -->
</xsl:when>
<xsl:otherwise> <!--parameter has been supplied --> </xsl:otherwise>
</xsl:choose>
2番目の例では、変数またはパラメータに実際の値が指定されていない、つまり空の文字列と等しいことも正しく処理されます。これはnot('')
がtrue
を返すために機能します。
ですが、変数contentの存在をテストする場合は、 'test =" $ var!= " – scunliffe
I second @scunliffe - $ varが存在するが空である場合、 'test =" $ var "'はまだtrueを返します。ただし、以前のバージョンのXSLを使用している場合は、 'test =" not($ var = '') "'と書く必要があります。 –
@scunliffe:空の文字列を扱うための私の拡張答えを見てください。 –
XSLTは宣言型パラダイムに属しているため、すべての変数に値があります。つまり、asignation命令はありませんが、変数を宣言すると値の関係式も宣言されます。
この値がノードセットのデータ型(質問から見た場合)の場合は、何も選択されていない場合に空のノードセットをテストする必要があります。空のノードセットの有効なブール値はfalseです。だから、@0xA3はtest="$node-set"
と答えました。
あなたは書きました:
を変数 はデフォルト1を使用するための値がない場合。どうやってするか ?
これは、探しているデータの種類によって異なります。
は、ノードセットのデータ型を仮定します$node-set-1|$node-set-2[not($node-set-1)]
@Alejandro:これは良い答えですが、OPは値がノードセットを保持することをどこにも示していません。それはちょうどストリングかもしれません... –
@Dimitre:良い点。私はこのように文章を読んでいます。「XMLファイルから値を取る変数が1つあります。 –
あなたの避難所:あなたは$ノードセット-1の値または$ノードセット-2 $ノードセット-1が空の場合は、その後、使用したい場合「価値がない」という意味を説明していません。ここは、一般的な解決策です:
not($v) and not(string($v))
この式は、「値がない」$v
場合に限っtrue()
に評価されます。
両方の条件が'0'
のように定義された文字列$v
値を有するが、not($v)
がtrue()
あるため、を満たす必要があります。
"value"がノードセットである場合、または値がスカラー(文字列、数値またはブール値など)である場合、デフォルトを使用するXSLT 1.0ではさまざまな方法で達成できます。
@Alejandroは、ノードセットを含むことになっている変数が空の場合、デフォルト値を取得する一方通行を提供していました。(それ以外)
変数がスカラーを含むようになっている場合は、次の式は、その値を返します(それが値を持っている場合)、または所望のデフォルト:
concat($v, substring($default, 1 div (not($v) and not(string($v)))))
スカラー値であっても変数はどのように設定できないのですか?パラメータのみを設定することはできません(デフォルトの式なし)。この場合にのみ、パラメータは空の文字列を値として取ります。 –
@Alejandro:[ポイント11](http://www.w3.org/TR/xslt#variables)によれば、変数*は値に束縛されている可能性があります。 select属性または変数バインディング要素の内容によって明示的に指定された値がない場合、[point 11.2]の3番目の箇条書き(http://www.w3.org/TR/xslt#variable-values)がバインディングを適用します変数を空の文字列に変換します。 –
@ 0xA3:いいえ、変数バインディング要素は3つの代替方法で変数の値を指定できます.3番目の方法は '可変バインディング要素は空の内容を持ち、select属性を持たず、変数の値は空の文字列 'です。したがって、それは明確な価値を持っています。価値のないものはありません。 –
私はたくさんのを試してみましたSOからの解決策、私の最後の解決策は@ dimitre-novatchevから取られましたが、それも毎回働いていません。最近私は、ランダムなGoogle検索からもう1つのソリューションを見つけました。コミュニティと共有すると考えました。
空の変数値をチェックするために、空の変数を宣言し、その値をテスト条件と比較することができます。ここでは、コードスニペットは次のとおりです。ここで
<xsl:variable name="empty_string"/>
<xsl:if test="testVariableValue != $empty_string">
...
</xsl:if>
空 シナリオを試験する新しい変数の値を保持testVariableValue。 空の変数状態をテストすることをお勧めします。
たとえば、$reference
という名前の変数に何かが含まれているかどうかを確認するには、string-length
を使用できます。
<xsl:choose>
<xsl:when test="string-length($reference) > 0">
<xsl:value-of select="$reference" />
</xsl:when>
<xsl:otherwise>
<xsl:text>some default value</xsl:text>
</xsl:otherwise>
</xsl:choose>
normalize-space
も必要に応じて使用してください。
- 1. XSLTで変数がヌルか空であるかどうかをチェックする方法は?
- 2. 数字が値で終わるかどうかをテストするには?
- 3. コンパイル時に変数の値がわかっているかどうか分からない場合
- 4. XSLT:変数終了が宣言されたかどうかを確認
- 5. 整数の値がどこからも変わります
- 6. Javaクイックソートなぜ/どこに値が変わるのですか?
- 7. 整数が0で終わるかどうかを調べる
- 8. 変数の値が変更されるかどうか確認する
- 9. 変数が数値か文字列かどうかをチェックする方法は?
- 10. どの変数が未定義であるかはどのようにしてわかりますか? (フラッシュビルダー)
- 11. なぜリストの変数の値がPythonで変わるのですか?
- 12. 変数が値を変更するかどうかを調べる
- 13. リニアプログラミング - 変数が偶数であるかどうかを知る
- 14. XSLT:属性が存在するかどうかの確認
- 15. 変数をチェックする方法は、UNIXで数値であるかどうか
- 16. 値がSassの整数であるかどうかのテスト
- 17. 数値が範囲内にあるかどうかのブール値
- 18. XSLTでは、どのようにグローバル変数を別のスコープからインクリメントするのですか?
- 19. XSLT:ノードがノードリストにあるかどうかを調べる
- 20. XSLT変数が不変であるにもかかわらず、変数をインクリメントしようとしています
- 21. $ _GET変数が数値文字列かどうかを調べる
- 22. select変数に列の値があるかどうかをチェックする方法
- 23. スピナーを持つ入力値を計算するにはどうすれば数値が変わると結果も変わるのですか?
- 24. 変数が有効かどうか
- 25. 数値がfloat64であるかどうかを調べる
- 26. 変数が定義されているかどうかのバッチファイルチェックとその値
- 27. 値が数値かどうかを確認する方法
- 28. Excelで値がCOUNTIFS内の数値であるかどうかをチェック
- 29. XSLT 1.0からXSLT 2.0への変換
- 30. 変数がLuaのいくつかの値のいずれかであるかどうかを確認
[XSLTで変数が存在するかどうかをテストするにはどうすればよいですか?](http://stackoverflow.com/questions/1299808/in-xslt-how-do-you-test-to-see- variable-exist-exists) –