3

2 つの XML ファイルがあり、それらを結合して目的の出力を得たいと考えています。

XML ファイル -1

<Countries>
<Country>
   <No C="1"/>
   <Name>India</Name>
</Country>
<Country>
   <No C="2"/>
   <Name>USA</Name>
</Country>
<Country>
   <No C="3"/>
   <Name>Srilanka</Name>
</Country>
<Country>
   <No C="4"/>
   <Name>Thailand</Name>
</Country>
</Countries>

XML ファイル - 2

<Capitals>
  <Capital>
      <No C="1"/>
      <Name>New Delhi</Name>
  </Capital>
  <Capital>
      <No C="2"/>
      <Name>Washington DC</Name>
  </Capital>
  <Capital>
      <No C="3"/>
      <Name>Colombo</Name>
  </Capital>
  <Capital>
      <No C="4"/>
      <Name>Bangkok</Name>
  </Capital>
</Capitals>

出力希望 -

India - New Delhi
USA - Washington DC
Srilanka - Colombo
Thailand - Bangkok

私が試したことは似ていますが、目的の出力を取得できません:(

for $x in doc('Country')/Countries
  return 
  <a>
 {$x/Country/Name}
 {
   for $y in doc('Capital')/Capitals
   where $y/Capital/No/@C = $x/Country/No/@C
    return $y/Capital/Name
  }
  </a>
4

2 に答える 2

3

私は答えを得ました、そしてそれは -

述語での双方向結合 -

for $x in doc('country')//Country
  return 
  string-join( ($x/Name/text(),  
     for $y in doc('capital')//Capital
       where $y/No/@C = $x/No/@C
       return $y/Name/text()
                ), " - ")
于 2012-10-19T09:05:42.880 に答える
2

あなたの答えは正しい結果をもたらしますが、次の構文 (別の FLOWR 式の代わりに XPath を使用) の方がはるかに簡単です。

for $x in doc('country')//Country
return 
  string-join( ($x/Name/text(),  
    $doc('capital')//Capital[./No/@C = $x/No/@C]/Name/text()
            ), " - ")
于 2012-10-19T09:59:45.093 に答える