我正在运行此查询并收到以下提到的错误。有人可以帮忙吗?
列名'中间名'包含所需的无效XML标识符 FOR XML; ' '(0x0020)是第一个出错的角色。
SELECT
Username as [LastName],
'' AS [Middle Name],
'' AS Birthdate,
'' AS [SSN],
0 AS [Wage Amount]
FROM
Employee
FOR XML PATH
答案 0 :(得分:11)
您不能在XML元素或属性名称中包含空格。使用
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == RESULT_OK) {
Place place = PlacePicker.getPlace(data, this);
String toastMsg = String.format("Place: %s", place.getName());
Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
}
}
}
答案 1 :(得分:0)
对于最简单的情况,史密斯的解决方案可以正常工作。 由于我有约束要在我的XML上保留字符,例如空格,@,',/等,因此最终我通过使用Base64编码标识符解决了这个问题。 (请注意,名称的长度不能超过128位)然后在将XML读取为输入数据的地方,另一个小代码将轻松将Base64转换为原始字符串。
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解码为字符串
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);
}
}
请注意:
_
为前缀并在c#中将其删除。=
。应该用_
之类的东西代替。实际上,这比这里所说的要复杂。