【发布时间】:2013-08-28 06:57:11
【问题描述】:
有人知道为什么这个 XML 文本会在 SQL Server 2008 中引发非法名称字符错误吗?
'<cs><c a="2" b="CITY & STATE TX" c="CITY & STATE TX"/></cs>'
异常消息是
Msg 9421, Level 16, State 1, Line 2
XML parsing: line 1, character 23, illegal name character
以下是用于解析此 xml 的查询
DECLARE @CaptionsDescriptions XML = '<cs><c a="2" b="CITY & STATE TX" c="CITY & STATE TX"/></cs>'
DECLARE @DocHandle int
DECLARE @CaptionsDescriptionsTable TABLE
(
ID INT IDENTITY(1,1),
languageID INT,
Caption VARCHAR(50),
Description VARCHAR(2000)
)
EXEC sp_xml_preparedocument @DocHandle OUTPUT,@CaptionsDescriptions
INSERT INTO @CaptionsDescriptionsTable SELECT a,b,c
FROM OPENXML(@DocHandle,'cs/c')
WITH (
a int, -- language id
b varchar(50), -- caption
c varchar(2000) -- description
)
-- remove document handler
EXEC sp_xml_removedocument @DocHandle
【问题讨论】:
-
错误告诉你无效字符的确切位置。另外,为什么用 C# 标记?
-
很好的例子来说明为什么人们不应该手动形成 xml。
-
如果尝试将字符串转换为 SqlString 会怎样?它会将 & 转换为 &自动?
标签: xml sql-server-2008