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  
4

3 回答 3

22

&是 XML 中的保留/特殊字符。它应该是&amp;

如果您知道 SQL 从 1 开始计数,我什至会补充一点XML parsing: line 1, character 23, illegal name character:那么第 23 个字符是.&

于 2013-08-28T06:58:46.237 回答
5

你需要改变&&amp;

这个

于 2013-08-28T07:01:50.690 回答
0

像这样把你的价值观放在 cdata 的封面下

DECLARE @CaptionsDescriptions XML = '<cs><c a="2" b="<![CDATA[CITY & STATE TX]>" c="CITY & STATE TX"/></cs>'
于 2016-07-14T20:24:53.513 回答