Группировка Xquery по 2 тегам

Ниже приведена XML-часть моих данных.

<A>
 <a><Type>Fruit</Type><Name>Banana</Name></a>
 <a><Type>Fruit</Type><Name>Orange</Name></a>
 <a><Type>Fruit</Type><Name>Apple</Name></a>
 <a><Type>Fruit</Type><Name>Lemon</Name></a>
 <a><Type>Cars</Type><Name>Toyota</Name></a>
 <a><Type>Cars</Type><Name>Lamborghini</Name></a>
 <a><Type>Cars</Type><Name>Renault</Name></a>
</A>

Выход как -

<a>Fruits-Banana,Orange,Apple,Lemon</a>
<a>Cars-Toyota,Lamborghini,Renault</a>

Я пытался получить требуемый результат всеми тщетно. Я тоже пробовал предложение «группировать по», но получаю ошибки.

любая помощь?


person Community    schedule 22.01.2014    source источник
comment
@Pratik- какую ошибку вы получаете с предложением «группировать по»? В следующий раз, пожалуйста, укажите ошибки и код, который вы пробовали. Чтобы мы могли помочь вам лучше.   -  person John    schedule 22.01.2014


Ответы (1)


let $x:=
<A>
  <a><Type>Fruit</Type><Name>Banana</Name></a>
  <a><Type>Fruit</Type><Name>Orange</Name></a>
  <a><Type>Fruit</Type><Name>Apple</Name></a>
  <a><Type>Fruit</Type><Name>Lemon</Name></a>
  <a><Type>Cars</Type><Name>Toyota</Name></a>
  <a><Type>Cars</Type><Name>Lamborghini</Name></a>
  <a><Type>Cars</Type><Name>Renault</Name></a>
</A>

  for $z in distinct-values($x//a/Type)
    let $c := $x//a[Type=$z]/Name
    return
       <a>{concat($z, "-", string-join($c, ","))}</a>

Сначала for принимает отдельные значения тега Type, затем для каждого отдельного значения этого выводятся соответствующие значения всех тегов Name.

Затем, используя функцию concat, я объединил текст Type со строкой, сгенерированной string-join, используемой для добавления/добавления Name и , (запятая).

ХТХ :)

person John    schedule 22.01.2014
comment
Хороший подход, к тому же с XQuery 1.0. return в строке, следующей за for, не является строго обязательным; Я бы предложил удалить его. - person Joe Wicentowski; 22.01.2014
comment
Вы можете попробовать этот запрос в реальном времени по адресу try.zorba.io/queries/xquery/ZTtNrwgVmveyFtwk7Moon92cRMM%3D. - person wcandillon; 22.01.2014
comment
@joewiz- спасибо, что указали на это :) Обновлено без этого return - person John; 23.01.2014