1

可能重复:
XQuery 返回错误..?

以下是 XML 文件 -

<Continents>
  <Continent name="Asia">
    <Country name="Japan">
    <City name="Tokyo"><Desc>Tokoyo is a most populated City</Desc></City>
    <City name="Horishima"><Desc>What to say.. Faced the destruction due to Atom Bomb</Desc></City>
    </Country>
    <Country name="India">
    <City name="New Delhi"><Desc>Capital of India</Desc></City>
    <City name="Mumbai"><Desc>Financial Capital of India</Desc></City>
    <City name="Lucknow"><Desc>City of Nawabs</Desc></City>
    </Country>
  </Continent>  
</Continents>

我想列出国家的城市="India"

我的 XQuery FLWOR 代码是 -

for $x in doc("Continent")/Continents/Continent
  where $x/Country/@name='India'
  return $x/Country/City/@name

我希望输出为 -

 name="New Delhi" name="Mumbai" name="Lucknow"

但得到输出 -

 name="Tokyo" name="Horishima" name="New Delhi" name="Mumbai" name="Lucknow"

任何人都可以帮助我获得正确的输出吗?另外如何将它放在单独的行上?

4

3 回答 3

2

你在这里问了几乎完全相同的问题,同样的答案也适用于这里。你想要的是:

doc("Continent")/Continents/Continent/Country[@name = 'India']/City/@name

如果您希望每个结果都在自己的行中,请尝试以下操作:

string-join(
  doc("Continent")/Continents/Continent/Country[@name = 'India']/City/@name,
  '&#10;'
)

这应该导致:

New Delhi
Mumbai
Lucknow
于 2012-05-03T12:52:31.633 回答
1

您还可以稍微重写您的 FLWOR 以获得想要的结果:

for $x in doc("Continent")/Continents/Continent/Country
where $x/@name='India'
return $x/City/@name

(请注意,我移动了 /Country 部分)

如有必要,您可以按照 Leo 的建议将此 FLWOR 包装在一个字符串连接中,就像他包装他的 XPath 表达式替代方案一样。

于 2012-05-03T15:09:58.297 回答
1
/*/*/Country[@name='India']/City/concat('name="', @name, '" ')

注意:这也恰好是一个纯 XPath 2.0 表达式。

于 2012-05-04T14:27:08.453 回答