2

以下はXMLファイルです -

<Continents>
  <Continent n="Asia">
    <Country n="Thailand">
      <City>
        <Name>Bangkok</Name>
        <Desc>Capital on Thailand</Desc>
      </City>
    </Country>
    <Country n="India">
      <City>
        <Name>New Delhi</Name>
        <Desc>Capital on India</Desc>
      </City>
      <City>
        <Name>Mumbai</Name>
        <Desc>Financial capital on India</Desc>
      </City>
      <City>
        <Name>Chennai</Name>
        <Desc>A very good city</Desc>
      </City>
    </Country>
  </Continent>
</Continents>

baseX を使用して、CapitalNameという単語を含む都市を表示するクエリを作成していますが、エラーが返されます。クエリは -

/Continents/Continent[contains(Country/City/Desc,'Capital')]/Country/City/Name

そしてエラーは - エラー: [XPTY0004] 単一のアイテムが期待されています、(要素の説明 { ... }、要素の説明 { ... }、...) が見つかりました。

私を助けてください..そのようなクエリにFLWORを使用する必要がありますか?

4

2 に答える 2

5

元のクエリは次のように書き直された可能性があります...

/Continents/Continent[
  some $x in Country/City/Desc satisfies contains($x,'Capital')]
  /Country/City/Name

...また...

/Continents/Continent[
  for $x in Country/City/Desc
  where contains($x,'Capital')
  return $x]/Country/City/Name

...ただし、どちらのクエリでも、「首都」を含む都市の説明を含む大陸のすべての国が返さます。代わりに、これはおそらくあなたが探しているものです:

/Continents/Continent/Country/City[contains(Desc,'Capital')]/Name

キーワードの大文字小文字や発音区別符号などを無視するために、 containsテキスト式を使用することもできます。

/Continents/Continent/Country/City[Desc contains text 'Capital']/Name

お役に立てれば。

于 2012-04-25T11:43:17.807 に答える
2

述語は要素を含む[contains(Country/City/Desc,'Capital')]すべてのDescノードを選択するため、3 つの要素に評価されます。これを修正するには、述語を要素に移動するだけです (結局のところ、要素ではなく、要素をフィルター処理する必要があります)。私はそれをテストしませんでしたが、これはうまくいくと思います:'Capital'ContinentCityCityContinent

/Continents/Continent/Country/City[contains(Desc,'Capital')]/Name
于 2012-04-25T11:39:03.943 に答える