XQuery循环中递增索引位置值及解决主机名获取问题
MarkLogic XQuery 主机名查询问题解决
原代码问题分析
$totalhosts是主机名字符串序列,for $h in $totalhosts循环时,每个$h是单个字符串而非序列。fn:index-of($h, 2)是在字符串中查找字符"2"的位置,和你需要的序列索引逻辑完全不符,因此无法得到正确结果。
1. 返回集群/组中所有主机名
直接返回$totalhosts即可,它已经包含了组内所有主机名:
xquery version "1.0-ml"; import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy"; declare variable $totalhosts := xdmp:host-name(xdmp:group-hosts(xdmp:group())); $totalhosts
2. 循环中递增索引遍历主机名
通过生成索引序列,结合下标访问实现递增索引遍历:
xquery version "1.0-ml"; import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy"; declare variable $totalhosts := xdmp:host-name(xdmp:group-hosts(xdmp:group())); for $i in 1 to fn:count($totalhosts) return ( "当前索引: " || $i, "对应主机名: " || $totalhosts[$i] )
3. 获取指定索引(如索引2)的主机名
XQuery中序列下标从1开始,直接通过下标访问即可:
xquery version "1.0-ml"; import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy"; declare variable $totalhosts := xdmp:host-name(xdmp:group-hosts(xdmp:group())); declare variable $ind := 2; $totalhosts[$ind]
内容的提问来源于stack exchange,提问作者Aviator
相关产品推荐
相关产品推荐

