Как получить этот вывод с 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,
' '
)
Это должно привести к:
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.