現在、この構造体を使用して、指定されたXML文書にノードが存在しない場合にデフォルト値を割り当てています。同じことを述べるより簡潔な方法がありますか?ノードが存在しない場合のデフォルト値の適用
答えて
<xsl:choose>
<xsl:when test="var_name"><xsl:value-of select="var_name"/></xsl:when>
<xsl:otherwise>default</xsl:otherwise>
</xsl:choose>
I. XPath 2.0の
使用:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="yourVar" select="'something'"/>
<xsl:variable name="yourVar2" select="''"/>
<xsl:template match="/">
<xsl:sequence select="concat($yourVar, 'default'[not($yourVar)])"/>
<xsl:text>
</xsl:text>
<xsl:sequence select="concat($yourVar2, 'default'[not($yourVar2)])"/>
</xsl:template>
</xsl:stylesheet>
:ここ
concat($yourVar, 'default'[not($yourVar)])
が完了XSLT 2.0変換ありますこの変換は、(使用されない)任意のXML文書に適用される場合、所望の文字列が生成され、両方の変数ために出力される。
something
default
II。 XPath 1.0の
使用:
concat($yourNodeExpr,
substring('default', 1 + 7*boolean($yourNodeExpr)))
それは少なくとも1つのノードが含まれている場合、これはそれ以外の場合は、文字列"default"
を生成し、$yourNodeExpr
の文字列値を作成します。
説明:number(false()) = 0
とnumber(true()) = 1
:ブール値は、算術演算子のオペランドであるときはいつでものXPath 1.0で
は、この値を数値に変換される:
我々は、事実を使用。したがって、boolean($yourNodeExpr)
がtrue()
である場合、2番目の引数はsubstring above will become
1 + 7 = 8`になり、部分文字列は空の文字列になります。他方の側で
、boolean($yourNodeExpr)
はfalse()
、substring()
に2番目の引数が1+0 = 1
であり、サブストリング"default"
Aより一般的な表現ある場合:と仮定
concat(substring($val1, 1 div $cond1),
substring($val1, 1 div $cond2)
)
2つの条件$cond1
および$cond2
は、であり、互いに排他的である。(($cond1 and $cond2) = false()
および($cond1 or $cond2) = true()
)$cond1
がtrue()
の場合、上記の式は文字列$val1
を生成し、$cond2
がtrue()
の場合は$val2
という文字列を生成します。
このソリューションは機能しますが、直感的ではありません。正直言って、私は基本的にbash変数の代入に相当するものを探していました。 '$ {parameter-default}' – rophl
@rohl:直感的な解決策が必要な場合は、XPath 2.0以降を使用してください。 –
@rohl:この回答に追加したXPath 2.0の表現は、おそらくあなたの後ろのものです。 –
- 1. キーが存在しない場合デフォルト値を作成
- 2. ノード内の値が存在する場合のXSLT選択値
- 3. ノードが存在しない場合のXQuery
- 4. ノードが存在しない場合のxpath式?
- 5. ノードが存在しない場合のLINQ to XML
- 6. 値が存在しない場合にのみ挿入
- 7. 値が存在しない場合、MySQLの更新
- 8. ルビー:それが存在する場合はRubyでは、デフォルト値
- 9. result.responseText.matchが存在しない場合
- 10. レコードが存在しない場合は、
- 11. 存在しないCSSクラス名を適用した場合の影響
- 12. 存在しない場合のSQLクエリ
- 13. Angular JSが存在しない場合、デフォルトで段落を作成します。
- 14. 複数のIndexOfのクッキー値が存在しない場合のjQuery
- 15. データが存在しない場合の月の値の表示SQL Server
- 16. 存在しない場合はINSERT、存在する場合は削除
- 17. PHP MYSQL UPDATE(存在する場合)またはINSERT(存在しない場合)?
- 18. dsolefile - (Excelで)エラー値が存在しない場合の取り扱い
- 19. ピボット存在しない場合
- 20. 更新フォームの値がデータベースに存在しない場合にのみ
- 21. asp.net dropdownlist値が存在しない場合に選択された値
- 22. .htaccessファイルが存在しない場合は、リモートファイルのアップロードが
- 23. ルックアップ(DB)に値が存在しない場合の表示方法
- 24. インデックスが存在しない場合のインデックスの作成
- 25. 次の行が存在しない場合のSQLチェック
- 26. SQLへのアクセス - レコードが存在しない場合
- 27. cakePHPコントローラーが存在しない場合のルート
- 28. ヒストリテーブルが存在しない場合の自動マイグレーション
- 29. ファイルが存在しない場合にのみ作成する
- 30. フォルダがVBに存在しない場合のレジストリキーエラー
これは未検証の提案ですが、私はXPathセレクターが "or"を理解していると推測します: ' –
kernel
うまくいきません。 var_nameの値ではなくtrueを返します。 – rophl