Это у него должно работать ...
Двигатель движется по списку столбцов, открывает элемент, заполняет вложенные элементы, находит новый элемент (О! Я должен закрытьпоследний!) ... и т. д.
Атрибут должен быть указан перед содержащим элементом .Порядок имеет значение!
Попробуйте:
- идентичное имя: Вы можете быть удивлены
SELECT 1 AS [SomeElement]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
- Другое имя между
SELECT 1 AS [SomeElement]
,'in between' AS [SomeOther]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
- другого элемента - ну, - нет (вы также можете использовать NULL)
SELECT 1 AS [SomeElement]
,''
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
- Как вы думаете, что здесь выйдет?
SELECT 'blah' AS [SomeElement/@TheAttribute]
,1 AS [SomeElement]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
- ... а здесь?
SELECT 'blah' AS [SomeElement/@TheAttribute]
,1 AS [SomeElement]
,''
,'blub' AS [SomeElement/@TheAttribute]
,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');
- Это - наконец - ваш пример (в принципе)
SELECT 1 AS [SomeElement]
,'in between' AS [SomeOther]
,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');
- И - просто для удовольствия!- попробуйте тоже
SELECT 1 AS [SomeElement]
,NULL
,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');