Javaアプリケーション内でXMLファイルに対してxqueryクエリを実行するためにBaseX XQJ APIを使用しています。BaseX変数が定義されている間、未定義変数でXQJ APIエラーが発生しました
let $doc := doc("eprints")
for $i in distinct-values($doc//issn)
let $jn := $doc//paper[issn = $i]/publication
where (count(distinct-values($jn)) > 1)
return <issn num="{$i}">"{$jn}"</issn>
このクエリはBaseXアプリケーションでそれをテストして動作することを自分自身を説得した後、私はJavaコードでこのクエリを実装:私はうまく構築され、以下のXQueryは、私が欲しいの出力を生成します。
public static void main(String[] args) throws XQException{
XQDataSource ds = new BaseXXQDataSource();
ds.setProperty("serverName", "localhost");
ds.setProperty("port", "1984");
ds.setProperty("user", "xxxx");
ds.setProperty("password", "xxxxx");
ds.setProperty("databaseName", "eprints");
XQConnection conn = ds.getConnection("admin", "admin");
XQExpression xqe = conn.createExpression();
XQResultSequence result = xqe.executeQuery("let $doc := doc(\"eprints\")"+
"for $i in distinct-values($doc//issn)"+
"let $jn := $doc//paper[issn = $i]/publication"+
"where (count(distinct-values($jn)) > 1)"+
"return <issn num='{$i}'>'{jn}'</issn>"
);
}
このコード
しかし$のJN変数が見つからなかったことを示すエラーになった:スレッド「メイン」javax.xml.xquery.XQQueryExceptionで 例外:[XPST0008]:未定義の変数$ JN。クエリを見ると、$ jnがfor-statement内のlet文で実際に定義されていることが分かります。しかし、私は直接の$ JNを使用した$ JNに割り当てられた式を挿入すると、コードが正しく動作しない:
public static void main(String[] args) throws XQException{
XQDataSource ds = new BaseXXQDataSource();
ds.setProperty("serverName", "localhost");
ds.setProperty("port", "1984");
ds.setProperty("user", "admin");
ds.setProperty("password", "admin");
ds.setProperty("databaseName", "eprints");
XQConnection conn = ds.getConnection("admin", "admin");
XQExpression xqe = conn.createExpression();
XQResultSequence result = xqe.executeQuery("let $doc := doc(\"eprints\")"+
"for $i in distinct-values($doc//issn)"+
"where (count(distinct-values($doc//paper[issn = $i]/publication)) > 1)"+
"return <issn num='{$i}'>'{$doc//paper[issn = $i]/publication}'</issn>"
);
}
それはBaseX XQJのAPIのように思えることは持っているクエリを処理することができませんforステートメント内のletステートメント誰がエラーの原因が分かっていますか?
一般的にこれらの問題を回避したり、それらを追加する連結機能を使用すると、各行の前後に空白を追加する方がよいでしょう。 –
それは本当に私の問題を修正しました、ありがとう! –