Published on

June 29, 2012

Преобразование структур XML в SQL Server с использованием XQuery

Как разработчик SQL Server, я часто работаю с XML-данными, хранящимися в базе данных. Одним из мощных инструментов, которыми я часто пользуюсь для преобразования XML, является XQuery. В этой статье блога я расскажу о том, как переместить элементы узлов XML из их текущего расположения на уровень родительского узла с использованием XQuery.

Рассмотрим пример структуры XML, который предоставляет сведения о книге:

<Book>
  <BookFormats>
    <NumberOfBookFormats>2</NumberOfBookFormats>
    <Format Type="Kindle">
      <Price>5.00</Price>
      <Currency>£</Currency>
      <AvailableDate>2010-05-01</AvailableDate>
    </Format>
    <Format Type="Paperback">
      <Price>8.00</Price>
      <Currency>£</Currency>
      <AvailableDate>2010-03-20</AvailableDate>
    </Format>
  </BookFormats>
</Book>

Нашей целью является перемещение всех дочерних узлов из узла <BookFormats> на тот же уровень, что и узел <BookFormats>, и полное удаление узла <BookFormats> из XML.

В прошлом для достижения этой цели можно было использовать манипуляции со строками, но XQuery предоставляет гораздо более простой и безопасный подход. Вот пример того, как это можно сделать с помощью XQuery:

SELECT @XML.query('for $x in (/Book) return <Book> {$x/BookFormats/*} </Book>')

Приведенный выше код XQuery использует простое выражение FLOWR для возврата структуры XML, содержащей узел верхнего уровня <Book>, за которым следуют все дочерние узлы под узлом <BookFormats>. Это позволяет эффективно удалить узел <BookFormats> из XML.

Если вы хотите исключить определенные именованные узлы из результата, вы можете использовать функцию local-name(). Вот пример:

SELECT @XML.query('for $x in (/Book) return <Book> {$x/BookFormats/*[local-name(.) != "NumberOfBookFormats"]} </Book>')

В этом примере мы добавляем предикат к коду XQuery для проверки имени каждого дочернего узла под <BookFormats> и исключаем любые узлы с именем “NumberOfBookFormats”.

Используя возможности XQuery, мы легко можем преобразовывать структуры XML в SQL Server, не прибегая к сложной манипуляции строками. Надеюсь, вы найдете эту технику полезной в своих собственных проектах разработки SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.