2012-04-25 9 views
1

以下はXMLファイルである - baseXを使用してXQueryがエラーを返しました..?

<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> 

、私は資本単語を含む都市のNameを表示するためのクエリを書いていますが、エラーを返しています。

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

と誤差がある - - クエリがある エラー:[XPTY0004単一アイテム予想、(要素DESC {...}、素子DESC {...}、...)を求めます。

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

答えて

4

次のようにあなたの元のクエリが書き換えられている可能性が...

/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 

...しかし、クエリの両方が戻ります「キャップを含む市の説明が含まれ任意の大陸のすべての国 ital '。代わりに、これはあなたが探しているものはおそらくです:

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

あなたは同様にあなたの鍵言葉になどの場合、発音区別符号を無視するcontains text表現を使用することができます:

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

は、この情報がお役に立てば幸いです。

1

述語[contains(Country/City/Desc,'Capital')]は、Continent要素に対して'Capital'を含むすべてのDescノードを選択するため、3つの要素に評価されます。これを修正するには、述語をCity要素に移動します(結局のところ、Continentではなく、Cityの要素をフィルタリングする必要があります)。私はそれをテストしていないが、私はこれが機能することを期待します:

/Continents/Continent/Country/City[contains(Desc,'Capital')]/Name 
関連する問題