5

Javaプログラムでは、SaxonLibraryを使用していくつかのXQueryコマンドを解析しています。

ここで、最初にtokenize()を使用して、いくつかのテキストをいくつかのテキスト値に分割します。テキストの例は次のとおりです-

Mohan Prakash, Ramesh Saini

上記のテキストで、区切り文字として「、」を使用してtokenize()を使用します。そして、トークン化の結果を変数$varに格納します

この後、これらのテキスト値をループして、出力として次のようにします。

  Mohan Prakash,1
  Ramesh Saini,2

上からわかるように、各行の最後の値は最初の行のカウンターです。この値は1で、2番目の行の場合はこの値=2というように続きます。

以下のコードのようなものを使用することを考えました-

for $t in $var/position()
return concat($var[$t], ',', $t)

ただし、$ varはノードであると想定されているため、$ varでposition()を使用できないというエラーが発生します。

したがって、これを解決するには2つの方法があります-

(a)$varの値をノードに変換します

   I tried text{$var} but that is not giving accurate results.

値の配列をノードに変換するにはどうすればよいですか?

(b)以下を使用します--

      for $t in $var

ここで、forループ内でカウンターを作成して使用し、$ tの各値とともにカウント値を出力できるようにするにはどうすればよいですか?

4

2 に答える 2

3

at内でキーワードを使用できます。for

let $var := tokenize('Mohan Prakash, Ramesh Saini', ', ')
for $t at $pos in $var
return concat($t, ',', $pos)

Mohan Prakash,1これにより、2つの文字列とが返されますRamesh Saini,2

于 2012-09-16T21:59:25.480 に答える
1

このXQuery(これはXPath 2.0式でもあります):

for $text in 'Mohan Prakash, Ramesh Saini',
    $i in 1 to count(tokenize($text, ','))
        return concat(tokenize($text, ',')[$i], ',', $i, '
')

必要な正しい結果を生成します。

Mohan Prakash,1
Ramesh Saini,2
于 2012-09-16T22:04:20.487 に答える