我的SQL非常简单

选择ID为[员工ID],EMPNAME为[员工名称],SAL为XML Auto的EMP,emp,elements,root('customing'')

当我执行此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归档的名称,那么您可以理解该字段名称是由于空间而动态生成的。u003CEmployee_x0020_ID> 1u003C/Employee_x0020_ID>这是动态生成的,但我希望它应该像u003CEmployee ID>1u003C/Employee ID> 。我希望应在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>

其他提示

XML元素 在W3Schools:

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

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

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

(添加了强调)

我想这是同样的问题吗?对于SQL Server 2005中的XML自动和带有空间问题的列名称

答案是相同的。您无法在XML标签名称中具有空间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top