XQuery是XPath的扩展,但这个问题的答案完全与XPath相关。
XPath表达式具有动态上下文;以下是XPath规范中的详细信息:http://www.w3.org/TR/xpath-30/#id-xp-evaluation-context-components。上下文项可以是作为引用.
:
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[. eq "my product name"]
谓词[. eq "my product name"]
重新评估每个产品元件,并且.
是上下文项,即,元件的特定于该评估的参考。
几个XPath函数只接受上下文,而另一些函数默认上下文,并带有可选的参数。
下面是仅接受XPath 3中上下文的函数的完整列表:http://www.w3.org/TR/xpath-functions-30/#context。
一些例子:
fn:last()
取零个参数和如果有10个<product/>
元件返回上下文项
的大小,即下面的表达式是等效的:
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[fn:last()]
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[10]
fn:position()
取零组的参数和返回上下文位置
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[fn:position() > 3]
有迹象表明,采取零或-1个参数,其中,所述零参数形式访问上下文许多功能。我看到它们中的15个,在规范中搜索这个短语:“这个函数的零参数形式是·确定性的··依赖于上下文的·和·依赖于焦点的·”。
一个例子:
fn:string()
取零或-1参数和返回参数或上下文项作为字符串
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product/fn:string()
返回每个的字符串值<product/>
元素。这相当于
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product/fn:string(.)
文意项目被明确作为参数传递。 fn:string()
也可用于类型转换:fn:string(1)
返回"1"
。
是的,这很有道理,谢谢! – MrD