2

Oxygen XMLを使用して、他のXMLファイルへの参照を含むXMLファイルを操作しています。これらの他のXMLファイルは、メインXMLファイルを含むディレクトリのサブディレクトリに保存されます。

Downloads/
directory1/
  main.xml
  subdirectory1/
    other1.xml
    other2.xml

他のXMLファイルの場所は、メインファイル内の相対リンクとして保存されます。私のクエリは次のようになります。

for $df in /clldata/DiscussionForums/DiscussionForum
    let $href := replace(data($df/@href),"\\","/")
    for $p in doc($href)
return $p

私が遭遇した問題は、Oxygenがxqueryファイルへのパスを相対パスのベースとして使用し、明らかにファイルが見つからないというエラーが発生することです。クエリ内でXMLドキュメントへのパスを取得するにはどうすればよいですか?

現在、concat()を使用して正しいパスを付加していますが、これを簡単に再利用できるようにしたいと思います。

4

2 に答える 2

2

メインXMLドキュメントのURIを基準にしてURIを解決する必要があります。あなたの場合、あなたはおそらく次のようなことをしたいと思うでしょう:

let $href = resolve-uri($d/@href, base-uri($d))

ここで、base-uri($ d)関数は、関連するDiscussionForumノードを含むソースドキュメントの絶対URIを取得し、resolve-uriはこれに関連する新しいURIを解決します。

これは、jeditXQueryプラグインでSAXONを使用する場合に機能します。YMMV、私はOxygenXMLを使用したことがありません。

于 2009-08-04T13:49:12.707 に答える
0

次のXPath式で、リンクされているすべてのドキュメントを選択する必要があると思います。

/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))

したがって、次のように、見つかったすべてのドキュメントを介して任意のxml要素にドリルダウンできるはずです。

/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
/path/to/the/element/you/want/to/find/in/all/documents/@name

FLOWRスタイルの式を好む場合は、次のようになります。

for $doc in /clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
where $doc/some/criteria='select'
return $doc/path/to/the/element/you/want/to/find/in/all/documents/@name
于 2019-04-24T14:25:02.193 に答える