Имя поля с пробелом в случае автоматического вывода xml - PullRequest
1 голос
/ 21 января 2011

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

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

когда я выполняю этот 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, то вы можете понять, что имя поля генерируется динамически из-за пробела.1это генерируется динамически, но я хочу, чтобы оно генерировалось как1,Я хочу, чтобы пространство было сохранено в имени файла XML.поэтому, пожалуйста, скажите мне, что делать ........ спасибо

Ответы [ 3 ]

6 голосов
/ 21 января 2011

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

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

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

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

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

4 голосов
/ 21 января 2011

Я думаю, это тот же вопрос? FOR XML AUTO и имя столбца с пробелом в SQL Server 2005

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

1 голос
/ 21 января 2011

Вот вывод, который вы ищете, который выглядит как 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>
...