对于xml自动输出,具有空间问题的字段名称

时间:2011-01-21 07:29:58

标签: sql sql-server sql-server-2005 tsql for-xml

我的sql非常简单

选择ID作为[员工ID],EmpName作为[员工姓名],Sal作为[薪资]来自Emp FOR XML AUTO,ELEMENTS,ROOT('customers')

当我执行这个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字段名称,那么您可以理解该字段名称是动态生成的 由于空间。 &LT; Employee_x0020_ID→1&LT; / Employee_x0020_ID&GT;这是动态生成的,但我希望它应该像&lt; Employee ID&gt; 1&lt; / Employee ID&gt;一样生成。我希望空间应该保存在xml字段名称中。所以请告诉我该怎么做........谢谢

3 个答案:

答案 0 :(得分:6)

来自W3Schools的XML Elements

  

XML元素必须遵循以下命名规则:

  • 名称可以包含字母,数字和其他字符
  • 名称不能以数字或标点符号开头
  • 名称不能以字母xml(或XML,或Xml等)
  • 开头
  • 名称不能包含空格
  

可以使用任何名称,不保留任何单词。

(强调补充)

答案 1 :(得分:4)

我想这是同一个问题? FOR XML AUTO and column name with space problem in SQL Server 2005

答案是一样的。您不能在XML标记名称中包含空格。

答案 2 :(得分:1)

以下是您正在寻找的假装为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>