这肯定是可能的,您可以将其传入或将其声明为“全局”变量:声明的变量:
declare variable $forumUrl := "http://www.abc.com";
declare variable $rootNode := doc('abc');
declare function local:topic(){
for $topic in $rootNode//td[@class="alt1Active"]//a
return
<page>{concat($forumUrl, $topic/@href, '')}</page>
};
declare function local:thread(){
for $thread in $rootNode//td[@class="alt2"]//a
return
<thread>{concat($forumUrl, $thread/@href, '')}</thread>
};
或者您将 URL 作为参数传递:
declare variable $rootNode := doc('abc');
declare function local:topic($forumUrl){
for $topic in $rootNode//td[@class="alt1Active"]//a
return
<page>{concat($forumUrl, $topic/@href, '')}</page>
};
declare function local:thread($forumUrl){
for $thread in $rootNode//td[@class="alt2"]//a
return
<thread>{concat($forumUrl, $thread/@href, '')}</thread>
};
local:topic("http://www.abc.de")
注意我从您的示例中删除了“h:”命名空间并添加了$rootNode
变量。
希望这有帮助。
XQuery 函数的一般参数可以指定如下:
local:foo($arg1 as type) as type
例如,类型可能是:
xs:string
一个字符串
xs:string+
至少一个字符串的序列
xs:string*
任意数量的字符串
xs:string?
长度为零或一个字符串的序列
函数可以有任意多的参数,参数的类型可以省略。
也可以键入函数返回值,在您的示例的上下文中,签名可能是:
declare function local:thread($forumUrl as xs:string) as element(thread)+
定义 local:thread 只接受一个字符串并返回一个非空的线程元素序列。
迈克尔