3

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

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

这是我的表情——

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

下面给出的是我正在使用的 Xquery 代码——我正在使用 XQuery 库来解析 XML,该 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找到了一些内容,那么应该返回data($select_link),否则静态文本'Missing应该返回值'。

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

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 回答