Я пытаюсь запустить xquery для моего xml-файла. Это мой входной файл xml:xquery для группировки данных из xml-файла
<?xml version="1.0" ?>
<authors>
<author><name> Steven</name>
<title>advanced</title>
<title>TCPIP</title>
</author>
<author><name> George</name>
<title>DataMining</title>
<title>Economic</title>
</author>
<author><name> Den</name>
<title>TCPIP</title>
<title>Economic</title>
</author>
</authors>
Я пытаюсь сгруппировать каждое название и подсчитать количество авторов для каждого заголовка. Книги должны быть перечислены в порядке возрастания количества авторов. Для каждой книги выведите свой заголовок, количество авторов и имя всех его авторов в алфавитном порядке. И, наконец, вывод должен быть таким:.
<bib>
<book authors="1">
<title>Advanced</title>
<author>Steven</authhor>
</book>
<book authors="1">
<title>DataMining</title>
<author>George</author>
</book>
<book authors="2">
<title>TCPIP</title>
<author>Den</author>
<author>Steven</author>
</book>
<book authors="2">
<title>Economic</title>
<author>Den</author>
<author>George</author>
</book>
</bib>
Это мой код, который не работает :(там любая помощь, пожалуйста, если это возможно исправить мой код вместо того, чтобы писать новый код, так как я. хочу ответ будет выглядеть мой ответ.
<bib>
{for $a in doc('test')//authors
let $T:={for $c in doc ('test')//authors/author[title=$a/author/title]
order by count($T)
return <book authors="{count($T)}">
{<title> {distinct-values($T/title)}
for $x in $T
order by $x/name()
return <author>{$x/name()}</author>}
</book>}
</bib>
Я думаю, что проблема в ту часть, которую я пытаюсь использовать команду let
. Как я знаю, что могут группировать данные по пусть команду. Я попытался для каждого названия в файле XML, чтобы захватить всех авторов и после этого подсчитать количество авторов и отсортировать их по имени. Я использую эту ссылку: http://basex.org/products/live-demo/, чтобы проверить свой ответ.
Ваш вклад XML и ожидаемый выход XML синтаксически неправильно ('' не закрывается, ''> недействителен). Что еще более важно (но, скорее всего, связано с недействительным XML), я не понимаю, как связаны авторы и названия. Обычно у вас будет какая-то иерархия, но здесь авторы и названия - все братья и сестры. Тем не менее, один первый намек: проблема, которую вы описываете, кричит для выражения 'group by', вы должны обязательно переписать это. Поскольку BaseX поддерживает XQuery 3.0, он также поддерживает 'group by' –
dirkk
Ваш xml не очень хорошо сформирован. – PhillyNJ
Вы правы Я изменил формат файла XML – star2014