Share via


xml verilerinin seri hale getirme

Xml verilerini vuran yazdığınızda açıkça veya örtük olarak sql dize veya ikili türü, veri türü seri bu konuda açıklanan kurallara uygun şekilde xml içeriği.

Seri hale getirme kodlaması

sql hedef türü VARBINARY ise, sonuç utf-16 önde bir utf-16-bayt düzeni işareti ile ancak bir xml bildirim rağmen.Hedef türü çok küçük olursa, bir hata ortaya çıkar.

Örneğin:

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

Bu sonucu verir:

0xFFFE3C0094032F003E00

sql hedef türü nvarchar veya nchar, sonucu utf-16 bayt sırası işareti önde ve bir xml bildirim olmadan rağmen.Hedef türü çok küçük olursa, bir hata ortaya çıkar.

Örneğin:

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

Bu sonucu verir:

<Δ/>

sql hedef türü varchar veya nchar, sonucu bir bayt sırası işareti veya xml bildirim olmadan veritabanı harmanlama kod sayfa karşılık gelen kodlama sıralanmış.Hedef türü çok küçük veya hedef harmanlama kod sayfa değerini eşlenemez, bir hata ortaya çıkar.

Örneğin:

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

Bu bir hata neden olabilir geçerli harmanlama 's kod sayfa Unicode karakter Δ temsil etmek veya onu belirli kodlamasında temsil eder olamaz.

xml döndürürken sonuçlar için istemci tarafı, utf-16 veri gönderilir kodlama.istemci tarafı sağlayıcı daha sonra verileri kendi API kurallarına göre harekete geçirecek.

xml yapıları seri hale getirme

İçeriği bir xml veri türü normal şekilde sıralanmış.Özellikle, öğe düğümleri öğe biçimlendirme için eşleştirilir ve metin içeriği metin düğümü eşleştirilir.Hangi karakterlerin entitized ve Atomik değerlerin nasıl yazılı koşullarda ancak, serileştirilmiş 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 yeteneğine sahip olması gerekir.Bu nedenle, bazı karakterler karakterler xml parser'ın normalleştirme aşaması arasında gidiş-dönüş yeteneğini korumak için entitized bir şekilde sıralanmış gerekir.Ancak, bazı karakterler belgesi iyi biçimlendirilmiş olan entitized etmesi 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 entitized için &amp; &lt; ve &gt; Sırasıyla, bir öznitelik değeri veya öğenin içeriği içinde durumunda.

  • Öznitelik değerlerini kapsayan için (u + 0022) sql Server kullanan bir tırnak işareti olmadığından öznitelik değerleri tırnak işareti olarak entitized &quot;.

  • Yedek çifti tek bir sayısal karakter başvurusu, yalnızca sunucu üzerinde çevrim zaman entitized.Örneğin, u + D800 u + DF00 yedek çifti için 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ş dan, bunlar için kendi sayısal karakter başvuruları entitized &# x 9; and &#xA; Sırasıyla, öznitelik deðerleri içinde.

  • Ayrıştırma sırasında normalleştirilmiş arasında bir satır başı (cr, u + 000 d) önlemek için onu kendi sayısal karakter başvurusu entitized &#xD; İç iki öznitelik değerleri ve öğe içeriği.

  • Yalnızca boşluk içeren metin düğümleri korumak için genellikle sonuncusu da boşluk karakterlerinden birini kendi sayısal karakter başvurusu entitized.Bu yolla çözümlenmesi sırasında işleme boşluk ayarı ne olursa olsun boşluk metin düğümü reparsing 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))

Bu sonucu verir:

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

Son beyaz boşluk koruma kural uygulamak isterseniz, açık DÖNÜŞTÜR seçeneğini 1 den vuran, kullanabileceğiniz 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 türü örnek.Bu nedenle, herhangi bir sonucunu query() bir dize veya ikili türü artığını yöntem yukarıda açıklanan kurallara göre entitized.Değil entitized dize değerlerini elde etmek istiyorsanız, kullanmanız gereken value() yöntemi (xml veri türü) onun yerine.Kullanarak bir örnek şudur query() yöntem:

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

Bu sonucu verir:

This example contains an entitized char: &lt;.

Kullanarak bir örnek şudur value() yöntem:

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

Bu sonucu verir:

This example contains an entitized char: <.

Yazılı xml veri türü seri hale getirilmedi.

Bir yazılı xml veri türü örnek kendi xml şema türlerine göre yazılan değerleri içerir.Xs:dize için artığını XQuery üretir gibi bu değerleri tipine göre kendi xml şeması aynı biçimde dizileştirirler.Daha fazla bilgi için bkz: XQuery türü çevrim kuralları.

Örneğin, xs:double değeri 1.34e1 13.4 için aşağıdaki örnekte gösterildiği gibi sıralanmış:

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

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