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 に答える