2012-08-06 71 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'