Как получить этот вывод с 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>

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам