XQuery за показване на данни от два елемента наведнъж?

по-долу е xml файлът -

<Countries>
  <Country>
    <Name>India</Name>
    <Capital>New Delhi</Capital>
  </Country>
  <Country>
    <Name>USA</Name>
    <Capital>Washington DC</Capital>
  </Country>
  <Country>
    <Name>England</Name>
    <Capital>London</Capital>
  </Country>
  <Country>
    <Name>Japan</Name>
    <Capital>Tokyo</Capital>
  </Country>
  <Country>
    <Name>Srilanka</Name>
    <Capital>Colombo</Capital>
  </Country>
</Countries>

Съхраних го в BaseX, XMLDB. Сега като обикновените DB, ако бях съхранил там, щях да напиша проста select инструкция, за да извлека данните от таблицата. Например:

select name, capital from country

и получи и двата реда. нали Как може да се направи това с помощта на XQuery?


person Community    schedule 06.07.2012    source източник
comment
Какъв резултат искате?   -  person Mitya    schedule 06.07.2012
comment
Всъщност вече имате изхода - <Countries> е вашият контейнер за резултати, всеки <County> възел е резултатен кортеж и имате индивидуалните полета там. Какво наистина искате да направите, какъв резултат търсите?   -  person Jens Erat    schedule 06.07.2012


Отговори (3)


Ако очаквате изход без елементи, опитайте този

for $x in doc("Country")/Countries/Country
  return string-join( ($x/Name, $x/Capital), " - ")

Резултатът ще бъде -

`India - New Delhi USA - Washington DC England - London Japan - Tokyo Srilanka - Colombo`

Ако ги искате на отделни редове тогава, това е, което ще трябва да използвате -

for $x in doc("Country")/Countries/Country
  return <li>{string-join( ($x/Name, $x/Capital), " - ")}</li>

Вместо <li> можете да използвате всеки друг подходящ етикет.

person John    schedule 07.07.2012
comment
Джон-Благодаря ти. Търсех същия резултат. - person ; 07.07.2012

В релационна база данни (която графично описвате като "обикновена база данни") всяка заявка приема таблици като вход и произвежда таблица като изход. В XML база данни входът е XML, а изходът е XML. Така че трябва да опишете XML, който искате да създадете. След като сте направили това, отговорът на въпроса ви е да: със сигурност можете да напишете XQuery, за да произведете този изход.

person Michael Kay    schedule 06.07.2012
comment
Можеш ли да си направиш малко труда да обясниш последните 2 реда, които каза по-горе? Един пример би бил много полезен - person John; 07.07.2012
comment
Щастлив съм да ви покажа заявка, която произвежда желания резултат, ако ми кажете какъв резултат искате. - person Michael Kay; 09.07.2012

Изглежда, че искате последователност от всички name и capital елементи:

 /Countries/Country/(Name|Capital)

Резултатът, получен от тази заявка, е:

<Name>India</Name>
<Capital>New Delhi</Capital>
<Name>USA</Name>
<Capital>Washington DC</Capital>
<Name>England</Name>
<Capital>London</Capital>
<Name>Japan</Name>
<Capital>Tokyo</Capital>
<Name>Srilanka</Name>
<Capital>Colombo</Capital>
person Dimitre Novatchev    schedule 06.07.2012