正規表現を使用して2つのXFormノードを比較しようとしています。例えば、
- ノード1は/data/Q1です
- ノード2は/data/Q2です
私がやりたいのは、ノード2の値がノード1の値より大きくなることはできないという制約をノード2に配置することです。bind要素に次のステートメントを配置します。
constraint=regex(/data/Q1 >= /data/Q2)
しかし、これは機能していません。
とにかく、正規表現に前のノードから値を読み取らせることはできますか?
正規表現を使用して2つのXFormノードを比較しようとしています。例えば、
私がやりたいのは、ノード2の値がノード1の値より大きくなることはできないという制約をノード2に配置することです。bind要素に次のステートメントを配置します。
constraint=regex(/data/Q1 >= /data/Q2)
しかし、これは機能していません。
とにかく、正規表現に前のノードから値を読み取らせることはできますか?
regex()
xpath または xforms で定義されているという名前の関数はありません。したがって、これが実装固有の機能でない場合 (そうであれば、使用している xforms エンジンを質問に追加してください)、有効な正規表現を使用しても制約は機能しません。ノードの値が正規表現と一致するかどうかを確認する場合はmatches()
、XPath の一部である関数を使用する必要があります。
関数ではmatches()
、関数の引数に XPath を使用できる必要があります。/data/pattern
ノードに有効な正規表現パターンが文字列として含まれて/data/value
おり、そのパターンに一致するかどうかを確認する値があると仮定すると、機能matches(/data/value, /data/pattern)
するはずです。これを:のconstraint
属性に入れることもできます。xforms:bind
constraint="matches(/data/value, /data/pattern)"
matches()
通常、Martin がコメントしたように、2 つのノードの単純な値の比較には関数は必要ありません。XPath で使用できる通常の比較式を使用するだけです。