2012-08-06 4 views
2

XQuery를 사용하여 웹 페이지의 XML에서 일부 내용을 추출하려고합니다.xquery beginner- FLWOR 문에서 if-then-else를 사용하는 방법

여기서 if-then-else를 사용하려고합니다. 특정 조건이 충족되면 xquery 표현식에서 하나의 값이 반환되고, 그렇지 않으면 다른 값이 반환됩니다.

내가 웹 페이지에서 일부 내용을 추출하기 위해 노력하고 가구 있구만

와 내가 가지고있는 표현이다.

내가 사용하는 Xquery 코드는 다음과 같습니다. HTML 웹 페이지를 XML로 변환하여 얻은 XML을 구문 분석하기 위해 XQuery 라이브러리를 사용하고 있습니다 ... 그 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

, 다음 작동합니다 :

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' 
관련 문제