2012-08-06 32 views
2

我想使用XQuery从网页的XML等价物中提取一些内容。xquery初学者 - 如何在FLWOR语句中使用if-then-else

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

这是我 -

我的工作来提取网页中的某些内容表达我有。

下面给出了我正在使用的Xquery代码 - 我使用XQuery库来解析通过将HTML网页转换为XML获得的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,然后我得到错误... 基本上,如果上面找到$ select_block的某些内容,那么应该返回数据($ select_link),否则应该返回静态文本'Missing Value'。

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

回答

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' 

您可以简化的东西一点点,消除嵌套与谓词过滤器选择锚定体循环:

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'