3

XQuery を使用して、対応する Web ページの XML からコンテンツを抽出したいと考えています。

ここでは、if-then-else を使用したいと思います。特定の条件が満たされた場合、xquery 式によって 1 つの値が返されます。それ以外の場合は、別の値が返されます。

これは私が持っている表現です--

Web ページから一部のコンテンツを抽出する作業を行っています。

以下は、私が使用している Xquery コードです。XQuery ライブラリを使用して、HTML Web ページを 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-then を追加しようとしましたが、エラーが発生しています... 基本的に、上記の $select_block のコンテンツが見つかった場合、data($select_link) が返され、それ以外の場合は静的テキスト「Missing」が返されます。 Value' が返されます。

上記の xquery 式で if-then-else を使用する正しい方法は何ですか?

4

1 に答える 1

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'
于 2012-08-07T01:56:28.727 に答える