XML解析:第1行,第23个字符,非法名称字符

Sun*_*nil 9 xml sql-server-2008

有谁知道为什么这个XML文本在SQL Server 2008中抛出非法的名字符错误?

'<cs><c a="2" b="CITY & STATE TX" c="CITY & STATE TX"/></cs>'
Run Code Online (Sandbox Code Playgroud)

异常消息是

Msg 9421, Level 16, State 1, Line 2
XML parsing: line 1, character 23, illegal name character
Run Code Online (Sandbox Code Playgroud)

以下是用于解析此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  
Run Code Online (Sandbox Code Playgroud)

谢谢.

xan*_*tos 19

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

我甚至会补充一点,这XML parsing: line 1, character 23, illegal name character很清楚.如果你认为SQL从1开始计数,那么第23个字符就是&.


Ehs*_*san 5

您需要更改&amp;

这个