Ho un file XML che contiene autori ed editor.XQuery/XPath: utilizzo della funzione count() e max() per la restituzione dell'elemento con il conteggio più elevato
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="file:textbook.rnc" type="compact"?>
<books xmlns="books">
<book ISBN="i0321165810" publishername="OReilly">
<title>XPath</title>
<author>
<name>
<fname>Priscilla</fname>
<lname>Walmsley</lname>
</name>
</author>
<year>2007</year>
<field>Databases</field>
</book>
<book ISBN="i0321165812" publishername="OReilly">
<title>XQuery</title>
<author>
<name>
<fname>Priscilla</fname>
<lname>Walmsley</lname>
</name>
</author>
<editor>
<name>
<fname>Lisa</fname>
<lname>Williams</lname>
</name>
</editor>
<year>2003</year>
<field>Databases</field>
</book>
<publisher publishername="OReilly">
<web-site>www.oreilly.com</web-site>
<address>
<street_address>hill park</street_address>
<zip>90210</zip>
<state>california</state>
</address>
<phone>400400400</phone>
<e-mail>[email protected]</e-mail>
<contact>
<field>Databases</field>
<name>
<fname>Anna</fname>
<lname>Smith</lname>
</name>
</contact>
</publisher>
</books>
Sto cercando un modo per restituire la persona che è stata elencata più volte come autore e/o editore. La soluzione dovrebbe essere compatibile con XQuery 1.0 (XPath 2.0).
Stavo pensando di utilizzare una query FLWOR per scorrere tutti gli autori e gli editor, quindi fare un conteggio di autori/editor unici, quindi restituire gli autori/gli editor che corrispondono al conteggio più alto. Ma non sono stato in grado di trovare la soluzione adeguata.
Qualcuno ha qualche suggerimento su come una tale query FLWOR dovrebbe essere scritta? Questo potrebbe essere fatto in un modo più semplice, usando XPath?
Con i migliori saluti,
Jeanette
Grazie per la soluzione, Christian :) C'è un modo per restituire più di un autore/editor (se applicabile)? Ad esempio se ci sono due autori/editori che condividono lo stesso (massimo) conteggio come autore/editore? – Jea
@Jea: Sia in Christian che nella mia soluzione rimuovi solo la fine '[1]' e otterrai tutti i nodi che hanno il valore massimo. –