2012-04-25 116 views
1

下面是XML文件 -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> 

使用baseX,我写一个查询,显示包含单词资本城市Name但返回的错误。该查询是 -

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

和误差是 - 错误:[XPTY0004]单项预期,(元素说明{...},元件说明{...},...)中。

请帮帮我..是否需要使用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')]选择包含'Capital'的所有Desc节点作为Continent元素,因此它将评估为三个元素。要解决这个问题,只需将谓词移动到City元素(毕竟,要过滤City元素,而不是Continent)。我没有测试它,但我希望这个工作:

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