xquery beginner-如何在FLWOR语句中使用if-then-else

时间:2012-08-06 15:36:29

标签: xquery flwor

我想使用XQuery从网页的XML等价物中提取一些内容。

这里,我想使用if-then-else - 如果满足特定条件,则xquery表达式返回一个值,否则返回不同的值。

这是我对我的表达 -

我正在努力从网页中提取一些内容。

下面给出的是我正在使用的Xquery代码 - 我正在使用XQuery库来解析XML,这是通过将HTML网页转换为XML获得的...之后我从该XML页面中提取了一些特定内容...

                    declare variable $doc as node() external;

                    let $select_block := $doc//div[@class="randomclass" and contains(.,'MatchingText')]
                    for $select_link in $select_block/a 
                    for $select_link_url in $select_link/@href
                        where  contains($assignee_link_url,'inassignee')  
                     return data($select_link)

现在如何在此表达式中使用if-then-else?

我尝试在'return'关键字后立即添加if-then但是我收到错误... 基本上,如果上面的$ select_block找到了一些内容,那么应该返回数据($ select_link),否则应该返回静态文本'Missing Value'。

在上面的xquery表达式中使用if-then-else的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果我理解您要正确实现的目标,那么以下内容应该有效:

declare variable $doc as node() external;
let $select_block := $doc//div[@class="randomclass" and contains(.,'MatchingText')]
return 
    if ($select_block) then
     for $select_link in $select_block/a 
        for $select_link_url in $select_link/@href
            where  contains($select_link_url,'inassignee') 
                return data($select_link)
    else 'Missing Value'

您可以简化一些事情并消除嵌套for循环,并使用谓词过滤器选择锚元素:

declare variable $doc as node() external; 
let $select_block := $doc//div[@class="randomclass" and contains(.,'MatchingText')]
return 
    if ($select_block) then
     for $select_link in $select_block/a[@href[contains(., 'inassignee')]]
         return data($select_link)
    else 'Missing Value'