Добавить два атрибута в for xml path, но чтобы был закрывающий тег
Есть запрос для MS Sql Server:
select id as "@Id", name as "@Name"
from [mydatabase]
for xml path('furgon')
Результат получаю такой:
<furgon Id="51000813" Name="блаблабла" />
<furgon Id="11070" Name="блаблабла1" />
<furgon Id="0" Name="блаблабла2" />
А мне нужен результат такой:
<furgon Id="51000813" Name="блаблабла" >
</furgon>
<furgon Id="11070" Name="блаблабла1" >
</furgon>
<furgon Id="0" Name="блаблабла2" >
</furgon>
Подскажите, пожалуйста, как изменить запрос?
Ответы (1 шт):
В первом результате закрывающий тег тоже есть, вот он: />
.
Так что эти два результата равны, за исключением пробельных символов, которые чаще всего игнорируются.
Если добавить в запрос ''
:
select id as "@Id", name as "@Name", ''
то получится результат:
<furgon Id="51000813" Name="блаблабла"></furgon>
Тут есть явный закрывающий тег, но на той же строке.
Если добавить в запрос char(10)
:
select id as "@Id", name as "@Name", char(10)
то, соответственно, вставится перевод строки:
<furgon Id="51000813" Name="блаблабла">
</furgon>
Тут вопрос щекотливый, а как и где дальше этот результат будет использоваться? Если передавать эти данные в xml-парсер, соответствующий спецификации xml, то ему плевать на пробельные символы - он переварит все (в зависимости от настроек).
Но вы, похоже, хотите просто вывести результат куда-то в UI. Тут всё зависит от того, что это за UI? А также Windows или Linux? Они по разному воспринимают символы перевода строки и возврата каретки. Возможно, придётся добавить char(13)
.