【问题标题】:Field name with space problem in case of for xml auto output用于 xml 自动输出的字段名称有空格问题
【发布时间】:2011-01-21 07:29:57
【问题描述】:

我的sql很简单

从 Emp FOR XML AUTO、ELEMENTS、ROOT('customers') 中选择 ID 作为 [Employee ID]、EmpName 作为 [Employee Name]、Sal 作为 [Salary]

当我执行这个 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 这是动态生成的,但我希望它应该像 1ID> 一样生成。我希望在 xml 文件名中保留空间。所以请告诉我该怎么做........谢谢

【问题讨论】:

  • 问同一个问题两次并期待不同的答案是……奇怪。您要的不是 XML,所以不要指望产生 XML 的东西来产生它。
  • 你可能会再问,只是不要在同一个月做,更不用说当月了。也许明年他们会放宽 XML 规范。

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


【解决方案1】:

来自 W3Schools 的XML Elements

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

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

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

(已添加重点)

【讨论】:

    【解决方案2】:

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

    答案是一样的。 XML 标记名称中不能有空格。

    【讨论】:

      【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        相关资源
        最近更新 更多