XQuery: How can I return multiple values in formatted return? I do not understand why he returns it to me concatenated

0

Recently I'm learning XQuery, I've tried the following exercise:

  

We want to show for each student of the institute (institut.xml) its   name and the subjects that it studies, besides the total of subjects,   ordered by the number of subjects the student studies, in the   following format for each student:

<alumne>
  <nom>Filomeno Garcia</nom>
  <credits>
    <credit>Programació</credit>
    <credit>Xarxes Locals</credit>
    <total>2</total>
  </credits>
</alumne>

I've tried with

for $x in doc("institut")/persones/alumne order by count($x/credits/assignatura) return <alumne>{$x/nom}<credits><credit>{data($x/credits/assignatura)}</credit><total>{count($x/credits/assignatura)}</total></credits></alumne>

using BaseX 9.0 returns the following result:

<alumne>
  <nom>Marcelinu Paivinu</nom>
  <credits>
    <credit>Xarxes Locals</credit>
    <total>1</total>
  </credits>
</alumne>
<alumne>
  <nom>Eustaquio Pons</nom>
  <credits>
    <credit>XML</credit>
    <total>1</total>
  </credits>
</alumne>
<alumne>
  <nom>Pere Nou</nom>
  <credits>
    <credit>Programació</credit>
    <total>1</total>
  </credits>
</alumne>
<alumne>
  <nom>Federicu Pi</nom>
  <credits>
    <credit>XML Xarxes Locals</credit>
    <total>2</total>
  </credits>
</alumne>
<alumne>
  <nom>Filomeno Garcia</nom>
  <credits>
    <credit>Programació Xarxes Locals</credit>
    <total>2</total>
  </credits>
</alumne>
<alumne>
  <nom>Tomeu Bonys</nom>
  <credits>
    <credit>XML Programació</credit>
    <total>2</total>
  </credits>
</alumne>
<alumne>
  <nom>Bernat Garengou</nom>
  <credits>
    <credit>XML Xarxes Locals</credit>
    <total>2</total>
  </credits>
</alumne>
<alumne>
  <nom>Bill Garcia</nom>
  <credits>
    <credit>XML Programació Xarxes Locals</credit>
    <total>3</total>
  </credits>
</alumne>

As you can see, I changed the name 'assignatura' to 'credit' using the return format, but instead of returning multiple 'credits' it concatenates all in one.

Can someone help me?

I quote the original xml file:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persones>
  <professor>
       <nom>Pere Garcia</nom>
        <assignatura>XML</assignatura>
  </professor>
  <professor>
       <nom>Joan Perdut</nom>
       <assignatura>Xarxes Locals</assignatura>
  </professor>
  <professor>
       <nom>Johannes Wirth</nom>
       <assignatura>Programació</assignatura>
  </professor>
  <alumne>
    <nom>Federicu Pi</nom>
    <poblacio>Barcelona</poblacio>
    <any>2010</any>
    <credits>
      <assignatura>XML</assignatura>
      <assignatura>Xarxes Locals</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Marcelinu Paivinu</nom>
    <poblacio>L'Hospitalet</poblacio>
    <any>2010</any>
    <credits>
      <assignatura>Xarxes Locals</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Filomeno Garcia</nom>
    <poblacio>Barcelona</poblacio>
    <any>2010</any>
    <credits>
      <assignatura>Programació</assignatura>
      <assignatura>Xarxes Locals</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Eustaquio Pons</nom>
    <poblacio>Badalona</poblacio>
    <any>2009</any>
    <credits>
      <assignatura>XML</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Tomeu Bonys</nom>
    <poblacio>Barcelona</poblacio>
    <any>2009</any>
    <credits>
      <assignatura>XML</assignatura>
      <assignatura>Programació</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Bernat Garengou</nom>
    <poblacio>L'Hospitalet</poblacio>
    <any>2010</any>
    <credits>
      <assignatura>XML</assignatura>
      <assignatura>Xarxes Locals</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Pere Nou</nom>
    <poblacio>Badalona</poblacio>
    <any>2010</any>
    <credits>
      <assignatura>Programació</assignatura>
    </credits>
  </alumne>
  <alumne>
    <nom>Bill Garcia</nom>
    <any>2010</any>
    <credits>
      <assignatura>XML</assignatura>
      <assignatura>Programació</assignatura>
      <assignatura>Xarxes Locals</assignatura>
    </credits>
  </alumne>
</persones>
    
asked by 12.04.2018 в 00:08
source

1 answer

0

Resolved with a for nested: (I did not know that you could nest when you asked the question)

for $alumne in doc("institut")/persones/alumne
let $total := count($alumne/credits/assignatura)
order by $total
return <alumne>

<nom>{data($alumne/nom)}</nom>
<credits> {

               for $a in $alumne/credits/assignatura
               return <credit>{data($a)}</credit>
          }
<total>
{$total}
</total>

</credits>
</alumne>
    
answered by 12.04.2018 в 14:29