Как обернуть каждый возвращаемый результат узлом XML с помощью Xquery?

Возможно, можно добавить дополнительный цикл for вокруг каждого возврата и, таким образом, обернуть результат узлом?

Изменение образца запроса школ w3:

nicholas@mordor:~/flwor$ 
nicholas@mordor:~/flwor$ basex bookstore.category.name.xq 
<xml>
  <category>cooking</category>
  <title>Everyday Italian</title>
  <category>children</category>
  <title>Harry Potter</title>
  <category>web</category>
  <title>Learning XML</title>
  <category>web</category>
  <title>XQuery Kick Start</title>
</xml>nicholas@mordor:~/flwor$ 
nicholas@mordor:~/flwor$ 
nicholas@mordor:~/flwor$ cat bookstore.category.name.xq 

xquery version "3.1";


<xml>
{
for $x in db:open("bookstore")/bookstore/book
order by $x/title
return (<category>{data($x/@category)}</category>,<title>{data($x/title)}</title>)
}
</xml>
nicholas@mordor:~/flwor$ 

как я могу обернуть каждый результат элементом книги?

Пример данных xml:

<bookstore>
  <book category = "cooking">
    <title lang = "en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category = "children">
    <title lang = "en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category = "web">
    <title lang = "en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category = "web">
    <title lang = "en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

с сайта w3schools.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что-то вроде этого должно сделать это:

<xml>
{
for $x in db:open("bookstore")/bookstore/book
let $category := data($x/@category)
return (
for $book in $x  
  let $title := data($book/title)
  return(
<book>
<category>{$category}</category><title>{$title}</title>)
</book>)
)
}
</xml>

Выход:

<xml>
  <book>
    <category>cooking</category>
    <title>Everyday Italian</title>)
</book>
  <book>
    <category>children</category>
    <title>Harry Potter</title>)
</book>
  <book>
    <category>web</category>
    <title>XQuery Kick Start</title>)
</book>
  <book>
    <category>web</category>
    <title>Learning XML</title>)
</book>
</xml>

почему $x зациклено во внутреннем цикле? Я думаю, что потребуется еще один индекс. (как при переборе матрицы с обозначением i, j. Возможно, это вообще не применимо.)

Nicholas Saunders 10.12.2020 14:04

@NicholasSaunders Если я правильно понимаю вопрос, нам нужно пройти $x, чтобы извлечь значение атрибута category атрибута $x. Затем нам нужно перейти к дочернему элементу $x<title>, чтобы извлечь его текстовое значение; поэтому мы должны использовать его дважды.

Jack Fleeting 10.12.2020 14:23

Другие вопросы по теме