首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server包含XML所需的无效XML标识符;

问Server包含XML所需的无效XML标识符;
EN

Stack Overflow用户
提问于 2016-06-09 16:24:20
回答 2查看 13.5K关注 0票数 8

我正在运行这个查询,并得到下面提到的错误。有人能帮忙吗?

列名“中间名”包含XML所需的无效XML标识符;“”(0x0020)是错误的第一个字符。

代码语言:javascript
复制
SELECT 
    Username as [LastName],
    '' AS [Middle Name],
    '' AS Birthdate,
    '' AS [SSN],
    0 AS [Wage Amount]
    FROM
    Employee
     FOR XML PATH
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-09 16:28:39

XML元素或属性名称中不能有空格。使用

代码语言:javascript
复制
SELECT Username AS [LastName],
       ''       AS [MiddleName],
       ''       AS Birthdate,
       ''       AS [SSN],
       0        AS [WageAmount]
FROM   Employee
FOR XML PATH 
票数 17
EN

Stack Overflow用户

发布于 2019-11-13 14:44:02

对于最简单的情况,Smith的解决方案工作得很好。由于我有将字符(如空格、@、‘、/等)保留在XML上的约束,所以我最终通过使用Base64编码标识符来解决这个问题。(只需注意名称的长度不能depass 128位),那么在将XML作为输入数据读取的外部,另一小部分代码将很容易地将Base64转换为原始字符串。

代码语言:javascript
复制
CREATE FUNCTION [dbo].[ufn_string_To_BASE64]
(
    @inputString VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
    RETURN (
        SELECT
            CAST(N'' AS XML).value(
                  'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
                , 'VARCHAR(MAX)'
            )   Base64Encoding
        FROM (
            SELECT CAST(@inputString AS VARBINARY(MAX)) AS bin
        ) AS bin_sql_server_temp
    )
END
GO

采取VARCHAR是很重要的,它会给我们带来更短的Base64代码。

您也可以在标识符中添加char(10)、char(13)。

动态SQL可以帮助构建临时表来存储中间数据。

在我的例子中,C#将Base64解码为字符串。

代码语言:javascript
复制
if (value.StartsWith("_"))
{
    var base64Encoded = value.Substring(1).Replace('_','=');
    try
    {
        var data = System.Convert.FromBase64String(base64Encoded);
        value = Encoding.GetEncoding(1252).GetString(data);
    }
    catch (Exception e)
    {
        log.LogInformation(e.Message);
    }
}

照顾:

  1. XML标识符不能以数字开头,因此前缀为_,并在c#中删除它们。
  2. XML标识符中不接受=。应该用类似于_的其他东西来代替它。
  3. 将原始字符串中的编码解码为string时,使用正确的编码代码页,类似于对法语字符的1252。

实际上,这比这里所说的要复杂得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37731465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档