Seri hale getirme xml veri tanımlama

Xml veri türünü açıkça veya örtük bir sql dizesi ya da ikili türü döküm zaman, xml veri türü içeriği özetlenen bu konudaki kurallarına göre sıralanmış.

Seri hale getirme kodlaması

sql hedef türü VARBINARY ise, sonucu içeren bir utf-16-bayt sırası işareti önünde, ancak bir xml bildirimi utf-16'da serileştirilir. Hedef türü çok küçük ise, bir hata oluşturulur.

Örneğin:

select CAST(CAST(N'<Δ/>' as XML) as VARBINARY(MAX))

Sonuç şudur:

0xFFFE3C0094032F003E00

sql hedef türü nvarchar veya nchar, sonuç utf-16 bayt sırası işareti olmadan bir xml bildirimi ve önünde serileştirilir. Hedef türü çok küçük ise, bir hata oluşturulur.

Örneğin:

select CAST(CAST(N'<Δ/>' as XML) as NVARCHAR(MAX))

Sonuç şudur:

<Δ/>

sql hedef türü varchar veya nchar, sonuç veritabanı harmanlama kod sayfası bir bayt sırası işareti veya xml bildirimi olmadan karşılık gelen kodlamada serileştirilir. Hedef türü çok küçük ya da hedef harmanlama kod sayfası değerini eşlenemez, bir hata oluşturulur.

Örneğin:

select CAST(CAST(N'<Δ/>' as XML) as VARCHAR(MAX))

Bu hata, Unicode karakter Δ geçerli harmanlama'nın kod sayfasını temsil edemez ya da belirli kodlama o temsil edecek neden olabilir.

Verileri xml sonuçları istemci tarafına döndürürken, utf-16'da gönderilecek kodlama. İstemci tarafı sağlayıcı daha sonra verileri kendi API kurallarına göre harekete geçirecek.

Seri hale getirme xml yapıları

İçeriği bir xml zamanki veri türü seri hale. Özellikle, öğe düğümleri öğe biçimlendirme eşlenir ve metin düğümleri metin içeriği için eşleştirilir. Ancak, hangi karakterlerin entitized ve nasıl yazılı atomik değerleri koşullarda dizileştirirler aşağıdaki bölümlerde açıklanmıştır.

xml karakterleri entitization Serialization sırasında

Her serileştirilmiş xml yapısını reparsed yetenekli olmalıdır. Bu nedenle bazı karakterler karakterleri xml parser'ın normalleştirme aşamasında gidiş-dönüş özelliğini korumak için entitized bir şekilde sıralanmış gerekiyor. Ancak, bazı karakterler belgesi iyi biçimlendirilmiş olması entitized zorunda ve dolayısıyla ayrıştırılması mümkün. Seri hale getirme sırasında geçerli olan entitization kurallar şunlardır:

  • Karakterleri &, <, ve > her zaman için entitized &amp; &lt; ve &gt; sırasıyla, bir öznitelik değeri veya öğe içeriği içinde oluşursa.

  • Öznitelik değerlerini kapsayan (u + 0022) SQL Server kullanan bir tırnak işareti olduğundan, öznitelik değerleri tırnak işareti olarak entitized &quot;.

  • Yedek çifti, zaman döküm sunucuda yalnızca bir tek bir sayısal karakter başvurusu olarak entitized. Örneğin yedek çifti u + D800 u + DF00 sayısal karakter başvurusu entitized &# x 00010300;.

  • Bir sekme korumak için (u + 0009) ve satır besleme (lf, u + 000A) çözümlenmesi sırasında normalleştirilmiş gelen, onlar kendi sayısal karakter başvuruları entitized &# x 9; ve &XA; Öznitelik değerleri sırasıyla içinde.

  • Satır başı (cr, u + 000 d) çözümlenmesi sırasında normalleştirilmiş gelen önlemek için o kendi sayısal karakter başvurusu entitized &xD; içeride iki öznitelik değerleri ve öğe içeriği.

  • Yalnızca boşluk içeren metin düğümleri korumak için bir beyaz boşluk karakter, genellikle sonuncusu, kendi sayısal karakter başvurusu entitized. Bu yolla, reparsing, Ayrıştırma sırasında işleme boşluk ayarı ne olursa olsun boşluk metin düğümü korur.

Örneğin:

declare @u NVARCHAR(50)
set @u = N'<a a="&#xD;&#x9;'+NCHAR(0xD800)+NCHAR(0xDF00)+N'>">   '+NCHAR(0xA)+N'</a>'
select CAST(CONVERT(XML,@u,1) as NVARCHAR(50))

Sonuç şudur:

<a a="&#xD;&#x9;&#x00010300;&gt;">   &#xA;</a>

Son boşluk koruma kuralı uygulamak istemiyorsanız, zaman dan döküm açık dönüştürme seçeneği 1 kullanabilirsiniz xml bir dize veya ikili türü. Örneğin, entitization kaçınmak için aşağıdakileri yapabilirsiniz:

select CONVERT(NVARCHAR(50), CONVERT(XML, '<a>   </a>', 1), 1)

Unutmayın, query() yöntemi (xml veri türü) sonuçları bir xml veri örneğini yazın. Bu nedenle, herhangi bir sonuç query() bir dize veya ikili türü döküm yöntemi entitized yukarıda açıklanan kurallara göre. Değil entitized dize değerlerini elde etmek istiyorsanız, kullanmanız gereken value() yöntemi (xml veri türü) onun yerine. Aşağıdakileri kullanarak bir örnek ise query() yöntemi:

declare @x xml
set @x = N'<a>This example contains an entitized char: &lt;.</a>'
select @x.query('/a/text()')

Sonuç şudur:

This example contains an entitized char: &lt;.

Aşağıdakileri kullanarak bir örnek ise value() yöntemi:

select @x.value('(/a/text())[1]', 'nvarchar(100)')

Sonuç şudur:

This example contains an entitized char: <.

Bir Typed xml veri türü seri hale getirilmedi

Bir yazılı xml veri türü örneği kendi xml şema türlerine göre yazılan değerleri içerir. XQuery XS için döküm üretir gibi bu değerleri tipine göre kendi xml şema aynı biçimde dizileştirirler. Daha fazla bilgi için, bkz. XQuery türü döküm kuralları.

Örneğin, xs: Double değeri 1.34e1 13.4 için aşağıdaki örnekte gösterildiği gibi serileştirilir:

declare @x xml
set @x =''
select CAST(@x.query('1.34e1') as nvarchar(50))

Bu dize değeri 13.4 döndürür.

Ayrıca bkz.

Başvuru

XQuery türü döküm kuralları

CAST ve CONVERT (Transact-SQL)