4

問題を引き起こしている Xpath クエリで使用するコードを少し書いています。リストからランダムな名前を読み込もうとしていますが、float (x) が指数表記を返すことがあります。

Random r = new Random();
float x = r.nextFloat();

final String expression = "(/list/name[@minLevel<=" + minLevel + "])" +
    "[(" + x + " * count(/list/name[@minLevel<=" + minLevel + "])) +1]";

時々、expression は次のようになります。

(/name/list[@minLevel<=11])[(5.478859E-4 * count(/name/list[@minLevel<=11])) +1]

そして、どうやら xpath は指数表記で計算しないようです。これは、次のエラーが発生するためです。

javax.xml.transform.TransformerException: 5.478859E-4 could not be formatted to a number!

これを防ぐ方法についての助けをいただければ幸いです。

4

3 に答える 3

1

文字列連結による XPath 式の作成は、通常、最善の方法ではありません。インジェクション攻撃のリスクは別として、式を一度コンパイルすると、異なるパラメーターで繰り返し使用することができなくなることを意味します。

代わりに、式をコンパイルします

(/list/name[@minLevel<=$minLevel])[($x * count(/list/name[@minLevel<=$minLevel])) +1]

実行時にパラメータ $x と $minLevel の値を指定します。

于 2013-01-02T18:17:36.437 に答える