2013-08-28 37 views
6

Qualcuno sa perché questo testo XML genera un errore di carattere di nome non valido in SQL Server 2008?Analisi XML: riga 1, carattere 23, carattere nome non valido

'<cs><c a="2" b="CITY & STATE TX" c="CITY & STATE TX"/></cs>' 

Messaggio di eccezione è

Msg 9421, Level 16, State 1, Line 2 
XML parsing: line 1, character 23, illegal name character 

seguito è la query utilizzata per analizzare questo 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 

Grazie.

+0

L'errore ti dice esattamente dove il carattere non valido è. Inoltre, perché taggare con C#? – leppie

+2

Un bell'esempio per mostrare perché le persone non dovrebbero formare manualmente xml. – I4V

+0

Cosa succede se provi a trasmettere la stringa come SqlString? Converte automaticamente & a &? – Fandango68

risposta

15

Il & è un carattere riservato/speciale in XML. Dovrebbe essere &amp;

Aggiungo anche che XML parsing: line 1, character 23, illegal name character è abbastanza chiaro. Se si considera che SQL conta da 1, il 23 ° carattere è &.

+0

Non è chiaro se non si sa che nella sintassi XML '&' può essere seguito solo da '#' o un nome ... Ma è sempre difficile progettare messaggi di errore che significano qualcosa per le persone che non conoscono le regole. –

4

è necessario modificare &-&amp;

Do leggere this

0

mettere i valori sotto la copertura cdata come questo

DECLARE @CaptionsDescriptions XML = '<cs><c a="2" b="<![CDATA[CITY & STATE TX]>" c="CITY & STATE TX"/></cs>' 
Problemi correlati