Имя поля с пробелом в случае автоматического вывода xml

мой sql очень простой

выберите ID как [ID сотрудника], EmpName как [Имя сотрудника], Sal как [Зарплата] из Emp FOR XML AUTO, ELEMENTS, ROOT('клиенты')

когда я выполняю этот sql, я получаю вывод в формате xml. вывод xml

<customers>
<Emp>
  <Employee_x0020_ID>1</Employee_x0020_ID>
  <Employee_x0020_Name>Tridip</Employee_x0020_Name>
  <Salary>2500</Salary>
</Emp>
<Emp>
  <Employee_x0020_ID>2</Employee_x0020_ID>
  <Employee_x0020_Name>Ari</Employee_x0020_Name>
  <Salary>4000</Salary>
</Emp>
<Emp>
  <Employee_x0020_ID>3</Employee_x0020_ID>
  <Employee_x0020_Name>Dibyendu</Employee_x0020_Name>
  <Salary>3500</Salary>
</Emp>
</customers>

если вы видите имя файла xml, вы можете понять, что имя поля генерируется динамически из-за пробела. ‹Employee_x0020_ID>1‹/Employee_x0020_ID> создается динамически, но я хочу, чтобы он генерировался как ‹Employee ID>1‹/Employee ID>. я хочу, чтобы пространство было сохранено в имени файла xml. поэтому, пожалуйста, скажите мне, что делать ........ спасибо


person Thomas    schedule 21.01.2011    source источник
comment
Дважды задавать один и тот же вопрос и ожидать разных ответов... странно. То, о чем вы просите, не является XML, поэтому не ожидайте, что что-то, что создает XML, создаст его.   -  person Damien_The_Unbeliever    schedule 21.01.2011
comment
Вы можете спросить еще раз, только не делайте этого в один и тот же месяц, неделю, не говоря уже о месяце. Возможно, в следующем году они ослабят спецификации XML.   -  person RichardTheKiwi    schedule 21.01.2011


Ответы (3)


Вот результат, который вы ищете, который притворяется XML. Вы даже не сможете преобразовать его в XML ни в одном синтаксическом анализаторе (по крайней мере, не следует — в SQL Server этого не произойдет).

;with emp(ID, EmpName, Sal) as (select
    1, 'tridip', 2500 union all select
    2, 'ari', 4000)

select replace(convert(varchar(max),(
    select ID as [Employee ID], EmpName as [Employee Name], Sal as [Salary] 
    from Emp 
    FOR XML AUTO, ELEMENTS, ROOT('customers'))),
    '_x0020_', ' ')

Вывод (переформатирован для ясности - SQL Server возвращает все в одну строку)

<customers><Emp><Employee ID>1</Employee ID><Employee Name>tridip
</Employee Name><Salary>2500</Salary></Emp><Emp>
<Employee ID>2</Employee ID><Employee Name>ari</Employee Name>
<Salary>4000</Salary></Emp></customers>
person RichardTheKiwi    schedule 21.01.2011

Из элементов XML в W3Schools:

XML-элементы должны соответствовать следующим правилам именования:

  • Имена могут содержать буквы, цифры и другие символы
  • Имена не могут начинаться с цифры или знака препинания
  • Имена не могут начинаться с букв xml (или XML, или Xml и т. д.)
  • Имена не могут содержать пробелы

Можно использовать любое имя, слова не зарезервированы.

(выделение добавлено)

person Damien_The_Unbeliever    schedule 21.01.2011

Я так понимаю это тот же вопрос? ДЛЯ XML AUTO и имени столбца с проблемой свободного места в SQL Server 2005

Ответ тот же. В имени тега XML не может быть пробела.

person Mikael Eriksson    schedule 21.01.2011