【问题标题】:XQuery returning an error..?XQuery 返回错误..?
【发布时间】:2012-04-25 11:20:30
【问题描述】:

下面是 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,我正在编写一个查询以显示包含单词 Capital 的城市的Name,但返回错误。查询是 -

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

并且错误是 - 错误:[XPTY0004] 需要单个项目,(元素 Desc { ... },元素 Desc { ... },...)找到。

请帮帮我.. 是否需要使用 FLWOR 进行此类查询?

【问题讨论】:

    标签: xml xpath xquery basex


    【解决方案1】:

    您的原始查询可能已重写如下...

    /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 text 表达式来忽略关键字中的大小写、变音符号等:

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您的谓词[contains(Country/City/Desc,'Capital')]Continent 元素选择包含'Capital' 的所有Desc 节点,因此它计算为三个元素。要解决这个问题,只需将谓词移动到City 元素(毕竟,您要过滤City 元素,而不是Continent)。我没有测试它,但我希望它可以工作:

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

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多