5

私のXQueryは次のとおりです。

declare namespace xsd="http://www.w3.org/2001/XMLSchema"; 
for $schema in xsd:schema
for $nodes in $schema//*,
    $attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return $attr

戻る: name="city" name="city" name="city" name="city" name="city"

次のような個別の値を追加すると:

declare namespace xsd="http://www.w3.org/2001/XMLSchema"; 
for $schema in xsd:schema
for $nodes in $schema//*,
    $attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr)

戻る:city city city city city

必要な「都市」は 1 つだけですが、どうすればよいですか?

4

3 に答える 3

8

distinct-values結果全体に関数を適用する必要があります(つまり、個々の結果項目には適用しません)。

declare namespace xsd="http://www.w3.org/2001/XMLSchema"; 
distinct-values(
  for $schema in xsd:schema
  for $nodes in $schema//*,
      $attr in $nodes/xsd:element/@name
  where fn:contains($attr,'city')
  return $attr
)

クエリは、単一の XPath 式として記述することもできます。

distinct-values(//xs:element/@name[contains(., 'city')])
于 2013-06-01T15:12:00.207 に答える
4

を使用しgroup byます。city(for ループの) 各反復で にそのような要素が 1 つしかないため、クエリは複数回 を返します$attr。したがってdistinct-values、単一の要素で実行していますが、これを複数回実行しています。

declare namespace xsd="http://www.w3.org/2001/XMLSchema"; 
for $schema in xsd:schema
for $nodes in $schema//*,
    $attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
group by $attr
return $attr
于 2013-06-01T15:08:03.583 に答える
0

この作品

distinct-values(for $schema in xsd:schema
for $nodes in $schema//*,
    $attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr))
于 2013-06-01T15:14:10.463 に答える