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. Теперь, как и в обычных БД, если бы я хранил их там, я бы написал простой оператор 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