次の機能で成功したいのですが、ハードコーディングすると機能します。
declare function local:sort($collection as node()*, $filter as xs:SUBPATH?) as node()*{
for $element in $collection
order by
if ($filter) then ($element/$filter) (: OR SOME KIND OF fn:eval($filter) IF WE DEFINED $filter AS AN xs:string :)
else ($element/name()) (: Default :)
descending
return $element
};
そして、次のように呼び出すことができます。
for $element in local:sort(doc('data')/Data/*,'/@myAttr')
return $element
また
for $element in local:sort(doc('data')/Data/*,'/subnode/subnode/name()')
return $element
また
for $element in local:sort(doc('data')/Data/*,()) (: This is the default of function = own elment´s name :)
return $element
Mx の問題は、サブパスを渡すことです。相対 XPATH を引数およびノードのタイプとして送信する何らかの方法を知る必要があるか、または xs:string から実行時に有効なコードに渡すための何らかの eval が必要です。
何か助けはありますか?