2014-11-22 2 views
0

내가 뭘 하려는지 어떻게 말하고 있는지 모르겠지만 FID, BID 및 SUT의 모든 touples을 얻으려고합니다. 다음 XML을 고려XQuery에서 하위 요소와 '조인'을 수행하는 방법

<FOO> 
    <FID>f1</FID> 
    <NAME>f1</NAME> 
    <BAR> 
     <BID>b1</BID> 
     <SOMETHING>15</SOMETHING> 
    </BAR> 
    <BAR> 
     <BID>b2</BID> 
     <SOMETHING>25</SOMETHING> 
    </BAR> 
</FOO> 
<FOO> 
    <FID>f2</FID> 
    <NAME>f2</NAME> 
    <BAR> 
     <BID>b1</BID> 
     <SOMETHING>35</SOMETHING> 
    </BAR> 
    <BAR> 
     <BID>b3</BID> 
     <SOMETHING>0</SOMETHING> 
    </BAR> 
</FOO> 

I는 무엇이 필요 :

b1 f1 15 
b1 f2 35 
b2 f1 25 
b3 f2 0 

사람은 내가 사용하는 것이 구문을 알아? 내가 시도 :

for $foo in /root/FOO 
for $bar in /root/FOO/BAR 
let $fid := $foo/FID/text() where $foo/BAR/BID/text()=$bar/BID/text() 
let $bid := $foo/BAR/BID/text() where $foo/BAR/BID/text()=$bar/BID/text() 
let $something := $foo/BAR/SOMETHING/text() where $foo/BAR/BID/text()=$bar/BID/text() 
+0

당신은 무엇을 시도 했습니까? 스택 오버플로는 프리랜서를위한 무료 플랫폼이 아닙니다. 또한 XML 입력이 올바른 형식이 아닙니다. –

+0

xml이 고정되었으므로 Foo와 Bar에서 이중 루프를 시도했지만 복제본을 생성했습니다 –

+0

더 나은 모양입니다. 좋은 질문을하려면 실제 출력 (및 표시되는 오류 메시지 및 경고)도 포함하십시오. 자세한 내용은 [ask] 및 [SSCCE 작성 방법] (http://www.sscce.org)을보십시오. –

답변

0

먼저 <FID/> 요소에 의해 주문하고 싶었다 경우, 그것의 <BAR/>의 이상 그들 각각에 대한 <FOO/>의 이상 반복하고 문자열 각 덤핑으로 쉽게 것 시간 :

<BID/>들에 의해 그룹화
for $foo in /root/FOO 
for $bar in /BAR 
return string-join(($foo/FID, $bar/BID, $bar/SOMETHING), ' ') 

, 당신은 그 첫째을 통해 루프가 상대적으로 다른 정보를 수집

for $bar in //BAR 
order by $bar/BID 
return string-join(($bar/BID, $bar/../FID, $bar/SOMETHING), ' ') 

작은 정리 (중요한 정리없이 코드를 실행할 수 없어서) : $foo$FOO은 같지 않습니다. XQuery는 대소 문자를 구분합니다. 또한 return 절이 누락되었습니다.

관련 문제