지도의 출력을 관리하려고합니다. BaseX에서 get 함수를 사용하고 있습니다.BaseX의 XQuery : 매핑의 출력에서 평균값을 반환합니다.
<around>
<point NR="51151">161</point>
<point NR="31252">82</point>
<point NR="54321">323</point>
<point NR="54321">319</point>
<point NR="54321">327</point>
</around>
및 속성 (NR)와 호 및 값으로 특정 검색 지점으로부터의 거리에 일부 지리적 포인트를 나타낸다 : 다음
매핑 파일 보인다. 위의 예에서 포인트 54321과 같이 한 번 이상 나타나는 몇 가지 포인트가 있습니다. 이것은 동일한 내용의 지점이 "지점"이기 때문에 콘텐츠와 관련된 것입니다.
내가 얻으려는 대상은이 NR을 조회하면 평균 거리입니다.
내 쿼리 : BaseX에는 구문 오류 메시지가 없지만
let $c :=
<around>
<point NR="51151">161</point>
<point NR="31252">82</point>
<point NR="54321">323</point>
<point NR="54321">319</point>
<point NR="54321">327</point>
</around>
for $r in $c//point
let $m := map { data($r/@NR) := $r/text() }
return
if (map:contains($m, '54321' )) then
avg(map:get($m, '54321'))
else
()
이 ... 323 319 327
을 반환은 따라서 "평균"무시합니다.
어떻게하면됩니까? 미리 많은 감사드립니다!
대단히 감사합니다! –
하나의 키에 대해서만이 작업을 수행하는 경우 맵을 사용하는 대신'return avg ($ c/point [@ NR = '54321'])'을 사용하는 것이 더 빠르고 명확합니다. 그렇지 않으면지도를 만드는 이점을 얻기 위해 주요 조회 (즉, 루프 외부) 사이에지도를 저장해야합니다. –
실제로 이것은 여러 xml 파일을 업데이트 (매핑 결과에 따라 태그 삽입)해야합니다. 내 쿼리는 단지 최소한의 예였습니다 :-) 루프 외부에 어떻게 맵을 저장할 수 있습니까? 고맙습니다! –