Caratteri non validi e regole di escape
Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure
Questo articolo descrive il modo in cui i caratteri XML non validi vengono gestiti dalla clausola FOR XML ed elenca le regole di escape per i caratteri non validi nei nomi XML.
Caratteri FOR XML non validi
SQL Server sostituisce caratteri XML non validi con entità quando vengono restituiti all'interno di query FOR XML che non usano la direttiva TYPE.
Nei parser conformi a XML 1.0 vengono generati errori di analisi indipendentemente dal fatto che tali caratteri vengano sostituiti o meno con entità, tuttavia la forma con entità è maggiormente conforme a XML 1.1 ed è potenzialmente conforme alle versioni future dello standard XML. Semplifica inoltre il debug perché il punto di codice del carattere non valido diventa visibile.
Per gli utenti degli strumenti XML non è necessaria alcuna soluzione alternativa, perché il parser XML genererà in ogni caso un errore in corrispondenza dei caratteri non validi nel flusso di dati. Se si utilizzano strumenti non XML potrebbe essere necessario aggiornare la logica di programmazione in modo che sia in grado di cercare i caratteri come valori sostituiti con entità.
I caratteri spazi vuoti indicati di seguito vengono sostituiti da entità diverse nelle query FOR XML per mantenerne la presenza in sequenze di andata e ritorno:
Nel contenuto e negli attributi di un elemento:
hex(0D)
(ritorno a capo)Nel contenuto di un attributo:
hex(09)
(tab),hex(0A)
(avanzamento riga)
Questi caratteri vengono mantenuti nell'output e non verranno normalizzati da un parser.
Regole di escape
I nomi SQL Server che includono caratteri non validi per i nomi XML, quali gli spazi, vengono convertiti in nomi XML in modo tale che i caratteri non validi vengano convertiti in codici numerici in sequenza escape.
In un nome XML possono essere presenti solo due caratteri non alfabetici, ovvero i due punti (:
) e il carattere di sottolineatura (_
). Poiché il carattere di due punti è già riservato per gli spazi dei nomi, come carattere di escape viene utilizzato il carattere di sottolineatura. Di seguito vengono illustrate le regole di escape utilizzate per la codifica:
Per i caratteri UCS-2 non validi per i nomi XML, in base alla specifica XML 1.0, vengono usati i caratteri di escape
_xHHHH_
.HHHH
rappresenta il codice UCS-2 esadecimale a quattro cifre per il carattere in base all'ordine del primo bit più significativo. Ad esempio, il nome della tabellaOrder Details
viene codificato comeOrder_x0020_Details
.I caratteri che non rientrano nelle specifiche UCS-2 (le aggiunte UCS-4 dell'intervallo da U+00010000 a U+0010FFFF) vengono convertiti in
_xHHHHHHHH_
.HHHHHHHH
rappresenta la codifica UCS-4 esadecimale a otto cifre del carattere, se è attiva la compatibilità con le versioni precedenti con SQL Server 2000. In caso contrario, i caratteri vengono convertiti in_xHHHHHH_
per la compatibilità con lo standard ISO.Per il carattere di sottolineatura è necessario utilizzare caratteri di escape solo se è seguito dal carattere
x
. Ad esempio, il nome della tabellaOrder_Details
non viene codificato.Per il carattere dei due punti negli identificatori non vengono utilizzati caratteri di escape. Pertanto, l'elemento dello spazio dei nomi e i nomi degli attributi possono essere generati dalla query FOR XML. Ad esempio, la query seguente genera un attributo dello spazio dei nomi che include i due punti nel nome.
SELECT 'namespace-urn' as 'xmlns:namespace', 1 as 'namespace:a' FOR XML RAW;
Il risultato della query è il seguente:
<row xmlns:namespace="namespace-urn" namespace:a="1"/>
Per aggiungere spazi dei nomi XML è consigliabile utilizzare WITH XMLNAMESPACES.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per