2012-04-05 3 views
0

Если у меня есть xml, который имеет следующий пустой узел, например, следующий.xquery должен дать мне надлежащие закрытые теги для пустого узла (sql server 2008)

<TAG ID="abc"></TAG>

, когда я изменить/выбрать этот XML возвращает пустые теги, как

<TAG ID="abc" />

Я хочу пустые теги закрыты </TAG> закрытия как

Могу ли я добиться этого .. .?

+0

Подразумевая '/>' неприлично? –

+0

Неправильно, но я хочу, чтобы тег был закрыт ''. – Kash

ответ

0

Во многих процессорах XQuery 3.0 (Basex, саксонских и т.д.), «HTML» может быть определен как вариант сериализации, который будет выводить пустые элементы в ожидаемом пути:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 
declare option output:method "html"; 
<TAG ID="abc"></TAG> 

я не могу скажите, однако, когда/если XQuery 3.0 будет поддерживаться в SQL Server или если он предоставляет другой способ изменения значений по умолчанию для сериализации.

+0

Если у меня возникли следующие 'DECLARE @x XML SET @X = '' ВЫБРАТЬ @ x' как я могу добавить свой код с этим? – Kash

1

Любое приложение, которое потребляет XML, должно обрабатываться и эквивалентно, поэтому процессоры XQuery предполагают, что они эквивалентны и что нет законной причины, по которой пользователи должны предпочитать одну форму над другой. (Аналогично, например, они не позволяют вам запрашивать атрибуты в одиночных, а не двойных кавычках, или для пробелов, добавляемых вокруг знака «=».)

2

Обратите внимание, что сериализация Результат XML в SQL Server не будет определяться самим XQuery, а преобразованием типа данных XML в строковое представление. В вашем примере

DECLARE @X XML; SET @X = '<TAG ID="abc"></TAG>'; SELECT @X; 

Вы не используете XQuery, вы просто используете XML-анализатор и XML-сериализатор.

Таким образом, даже если бы мы добавили опции сериализации XQuery vNext, они не повлияли бы.

Как упоминает Майкл Кей, нет никакой разницы между двумя сериализациями. Почему вы хотите разграничить их? Если у вас есть инструмент, требующий этой дифференциации, я рекомендую попросить их изменить его, чтобы сделать свой синтаксический анализатор совместимым со стандартом. Кроме того, посмотрите, можете ли вы найти XML-анализатор/сериализатор на стороне клиента, который дает вам варианты того, как сериализовать пустой элемент содержимого.

Если вам нужна полная лексическая верность вместо верности XML Infoset в базе данных, я бы рекомендовал хранить ваш XML в varbinary (max), поскольку это сохранит вашу кодировку и каждую введенную вами кодовую точку за счет для выполнения обработки запросов требуется выполнять команды выполнения во время выполнения.

С наилучшими пожеланиями Майкл

 Смежные вопросы

  • Нет связанных вопросов^_^