私は(私はサクソンを使用しています)FLWORクエリのこの種を実行したいと思います:Saxon XQueryとコレクション:FLWORクエリで、返されたアイテムのファイル名を取得することは可能ですか?
for $baseItem in collection('file:/xmlDir?select=*.xml;recurse=yes')/item
let $itemToRetrieve := xs:string($baseItem/item)
let $itemFilter := xs:string($baseItem/filter)
let $fileName := tokenize("*xmlPath($baseItem)*"),'/')[last()]
where $itemFilter = 'test'
return ($itemToRetrieve, $fileName)
プロセッサによって発見返されるアイテム大規模なコレクション、上で作業しているとき、私はすぐに、見つけることができる。この方法は、 findコマンドのような外部プログラムを使う必要はありません。
私はdocument-uri()とbase-uri()関数を使用しようとしましたが、成功しませんでした。
これを達成する方法はありますか?
ご返信ありがとうございます。 'コレクション内の$ uriのための( 'ファイル:?。/ xmlDir = * [XML]を選択します;再帰= YES') 私はこれを試してみました!(。)文書-URI \tリターン($ URI)' 確かに私はファイル名のリストを取得します。 しかし、今では、flworクエリのforループ内のノードにどのようにフィードできますか? は私がしようとした場合: 'コレクション内の$ uriの( 'ファイル:/ xmlDir = * [XML]を選択します;再帰= yesの?。')のための文書-URI \tのlet $アイテム!(。):= $ URI /アイテム "/ 'の最初のオペランドの必須アイテムタイプはnode()です;指定された値にアイテムタイプがありますxs:anyURI" おそらく解決策は簡単でしょうか? $ itemsノードをループする方法は? – mattt
あなたは何をしたいのか分からずに書くべきコードを教えてもらえません。私はcollection()から戻ってきたノードにdocument-uri()を適用できることを実証していました。つまり、 'for $ d for collection(..)return {$d}' –
ありがとうございます。私の最初の例のように、私は項目とそれを含むファイル名の両方をflworから戻したいと思います。 このようにネストされたflworを使用してこれを行うことができました:コレクション内の$ uriのための 'for:ファイル:/ xmlDir?select = *。xml; recurse = yes ')!document-uri(。) \t for $ ($ itemToRetrieve、$ uri) ' \t しかし、私は多くのクエリを変更する必要があります。コレクション。 元のクエリに影響を与えずにファイル名を返す方法はありますか? – mattt