2011-09-19 4 views
0
<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <author> 
     <name>A</name> 
     <book>Book1</book> 
     <book>Book2</book> 
    </author> 
    <author> 
     <name>B</name> 
     <age>45</age> 
     <book>Book3</book> 
    </author>  
</root> 

작성자가 총 도서 수를 표시하는 방법은 무엇입니까?전체 자식 요소 수를 찾으십시오.

답변

0

한 가지 방법은 다음과 같습니다 책의 최대 수를 저술 한 모든 저자를 반환합니다

let $max-books = max(/root/author/count(book)) 
return /root/author[count(book) = $max-books] 

.

/root/author[count(book) = max(/root/author/count(book))] 

이 작업을 수행하는 또 다른 방법입니다 : 한 라이너로

, 이것은 단순화 할 수있는 책의 최대 수와 저자를 반환합니다

(for $author in /root/author 
order by count($author/book) descending 
return $author/name)[1] 

.

0

@Fox :이 질문에 "숙제"라고 태그를 붙여야합니까? ;-)

@Oliver Hallam : IMHO, @Fox는 각 저자를 가장 많은 책을 가진 저자가 아닌 해당 저자가 책의 양과 함께 나열하려고합니다.

let $max-books = max(/root/author/count(book)) 
return /root/author[count(book) = $max-books] 

첫 번째 쿼리 구문 오류가 있습니다. "="대신 ": ="을 사용해야합니다. 또한

@Fox : 해결책을 찾으려면 FLWOR expressions을보십시오. "for"부분을 사용하여 을 선택하고 각 개의 책 노드를 XPath 표현식으로 묶어 각 노드를 $ book 변수에 바인드 할 수 있습니다. 그런 다음 "let"부분을 사용하여 $ book을 "시작 지점"으로 사용하여 두 변수 ($ authorName 및 $ amountOfBooks)를 정의합니다. 마지막으로 "return"부분을 사용하여 결과 XML에 필요한 출력 형식을 정의하십시오.

관련 문제