2012-05-03 4 views
1

Можно создать дубликат:
XQuery returning an error..?Как получить этот результат с помощью 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" 

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

+1

Этого уже достаточно, чтобы ответить на: http://stackoverflow.com/questions/10314562/xquery-returning-an-error –

+0

@ Christian- Да, сначала я искал поиск. Большое спасибо. – John

ответ

2

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

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 
+0

Да, я сначала искал поиск. Большое спасибо. – John

+0

@ Leo- Спасибо, ответ помог мне решить ту же самую проблему. –

1

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

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

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

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

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

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

Смежные вопросы