Tengo un archivo XML que contiene autores y editores.XQuery/XPath: utilizando la función count() y max() para la devolución del elemento con el recuento más alto
<?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>
Estoy buscando una forma de devolver a la persona que ha sido mencionada la mayoría de las veces como autor y/o editor. La solución debe ser compatible con XQuery 1.0 (XPath 2.0).
Estaba pensando en usar una consulta FLWOR para repetir a través de todos los autores y editores, luego hacer un recuento de autores/editores únicos, y luego devolver el (los) autor (es)/editor (es) que coincidan con el recuento más alto. Pero no he podido encontrar la solución adecuada.
¿Alguien tiene alguna sugerencia sobre cómo se escribiría una consulta de FLWOR? ¿Podría hacerse esto de una manera más simple, usando XPath?
Saludos,
Jeanette
Gracias por la solución, Christian :) ¿Hay alguna manera de devolver más de un autor/editor (si corresponde)? Por ejemplo, si hay dos autores/editores que comparten el mismo (máximo) conteo como autor/editor? – Jea
@Jea: Tanto en Christian como en mi solución simplemente elimine el final '[1]' y obtendrá todos los nodos que tengan el valor máximo. –