2017-11-07 1 views
1

次のコードでは、例外がスローされます。 order byのため。XPathCompiler.compile()は "order by"で例外をスローします

Configuration config = createEnterpriseConfiguration(); 
Processor processor = new Processor(config); 
XPathCompiler xpath = processor.newXPathCompiler(); 
XPathExecutable exe = xPath.compile("for $x in /Order_1/Order_2 order by $x/@id descending, $X/@name ascending return $x"); 

それはのために正常に動作します:

XPathExecutable exe = xPath.compile("for $x in /Order_1/Order_2 return $x"); 

XPathExceptionは次のとおりです。

Message: net.sf.saxon.trans.XPathException: expected "return", found name "order" 
Location: XPath syntax error at char 27 near {...x in /Order_1/Order_2 order...}: 

私はこのケースでorder byを設定するにはどうすればよいですか?

+2

「これはどのような研究努力もしていないのですか?私は完全なコードサンプルを提供します。そして、私はcompile()呼び出しのために "order by"を扱うことについて検索して何も見つけることができませんでした。 –

+1

コンパイルしようとしている式は、XPathよりもXQueryに似ています。たとえば、https://www.oxygenxml.com/archives/xsl-list/200809/msg00391.htmlを参照してください。 –

+0

@ LukeWoodward - 私が理解しているように、XPath 2.0はXQueryのクエリ部分です。それは問題ではないはずです。結局のところ、 "order by"部分のないクエリは機能します。 –

答えて

0

"order by"句はXPathでは使用できず、XQueryでのみ使用できます。

代わりにXQueryCompilerを使用してください。

XPath 3.0には実際にsort()関数がありますが、これには十分ではないでしょう。たとえば、昇順キーと降順キーを混在させることはできません。

+0

これを最もうまく使用する方法のサンプルがありますか? XQueryから得たい最終結果は、XdmItemオブジェクトのリストを保持するXdmValueです.XdmItemオブジェクトは、クエリに一致するノードごとに1つずつあります。あれは正しいですか?そして、あなたはサクソンでこれを最善に行うための一例を持っていますか? –

+0

ps - 私が継承したコードはコンパイル/ロード/評価を2回実行するので、私は尋ねています。ユニークなXPathステートメントを取得したら、その一意のステートメントを実行します。それは私を不必要なものとして襲う。 –

+0

SourceForgeとsaxonica.comの両方のサイトで利用可能なsaxon-resourcesのダウンロードで、XPathとXQueryの両方にs9apiを使用したサンプルがあります。 –

関連する問題