Как получить этот вывод с помощью XQuery?

Возможный дубликат:
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>

Я хочу перечислить города для Country="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"

Может ли кто-нибудь помочь мне получить правильный вывод? Также как получить его на отдельной строке?


person John    schedule 03.05.2012    source источник
comment
На этот вопрос уже должен был быть дан ответ на stackoverflow.com/questions/10314562/xquery -возврат-ошибки   -  person Christian Grün    schedule 03.05.2012
comment
@Christian- Да, я должен сначала поискать. Большое спасибо.   -  person John    schedule 04.05.2012


Ответы (3)


Вы задали почти тот же вопрос здесь, и здесь применим тот же ответ. Что вы хотите:

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
person Leo Wörteler    schedule 03.05.2012
comment
Да, я должен сначала поискать. Большое спасибо. - person John; 04.05.2012
comment
@Leo- Спасибо, ответ помог мне решить такую ​​же проблему. - person ; 19.10.2012

Вы также можете немного переписать свой FLWOR, чтобы получить желаемые результаты:

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

(Обратите внимание, что я перемещаю часть / Country)

При необходимости вы можете обернуть этот FLWOR в объединение строк, как предложил Лео, так же, как он обертывает свою альтернативу выражения XPath.

person grtjn    schedule 03.05.2012

/*/*/Country[@name='India']/City/concat('name="', @name, '" ')

Примечание. Это также чистое выражение XPath 2.0.

person Dimitre Novatchev    schedule 04.05.2012