Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
XSLT mimarisi Visual Studio 2005 sürümünde yeniden tasarlandı. XslTransform sınıfı, XslCompiledTransform sınıfı ile değiştirildi.
Aşağıdaki bölümlerde, XslCompiledTransform ve XslTransform sınıfları arasındaki temel farklardan bazıları açıklanmaktadır.
Gösteri
sınıfı XslCompiledTransform birçok performans geliştirmesi içerir. Yeni XSLT işlemcisi, diğer programlama dillerinde ortak dil çalışma zamanının (CLR) yaptığı gibi, XSLT stil şablonunu ortak bir ara biçime derler. Stil sayfası derlendiğinde önbelleğe alınıp yeniden kullanılabilir.
XslCompiledTransform sınıfı, XslTransform sınıfından çok daha hızlı olmasını sağlayan diğer iyileştirmeleri de içerir.
Uyarı
Her ne kadar XslCompiledTransform sınıfının genel performansı XslTransform sınıfından daha iyi olsa da, Load sınıfının XslCompiledTransform yöntemi, bir dönüştürme sırasında ilk kez çağrıldığında Load sınıfının XslTransform yönteminden daha yavaş çalışabilir. Bunun nedeni XSLT dosyasının yüklenmeden önce derlenmiş olmasıdır. Daha fazla bilgi için şu blog gönderisine bakın: XslCompiledTransform XslTransform'dan daha yavaş mı?
Güvenlik
Varsayılan olarak, XslCompiledTransform sınıfı XSLT document()
işlevi ve ekli betik oluşturma desteğini devre dışı bırakır. Bu özellikler, özelliklerin etkinleştirildiği bir XsltSettings nesne oluşturulup yöntemine Load geçirilerek etkinleştirilebilir. Aşağıdaki örnekte, kod çalıştırmayı etkinleştirme ve XSLT dönüşümü gerçekleştirme işlemleri gösterilmektedir.
Uyarı
Betik blokları yalnızca .NET Framework'te desteklenir. .NET Core veya .NET 5 veya üzeri sürümlerde desteklenmez .
// Create the XsltSettings object with script enabled.
XsltSettings settings = new XsltSettings(false,true);
// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");
' Create the XsltSettings object with script enabled.
Dim settings As New XsltSettings(False, True)
' Execute the transform.
Dim xslt As New XslCompiledTransform()
xslt.Load("calc.xsl", settings, New XmlUrlResolver())
xslt.Transform("books.xml", "books.html")
Daha fazla bilgi için bkz. XSLT Güvenlik Konuları.
Yeni Özellikler
Geçici Dosyalar
Geçici dosyalar bazen XSLT işlemi sırasında oluşturulur. Stil sayfası betik blokları içeriyorsa veya hata ayıklama ayarı true olarak ayarlanmış şekilde derlenmişse, %TEMP% klasöründe geçici dosyalar oluşturulabilir. Zamanlama sorunları nedeniyle bazı geçici dosyaların silinmediği örnekler olabilir. Örneğin, dosyalar geçerli AppDomain veya hata ayıklayıcı tarafından kullanılıyorsa, TempFileCollection nesnesinin sonlandırıcısı bunları kaldıramaz.
TemporaryFiles özelliği, tüm geçici dosyaların istemciden kaldırıldığından emin olmak için ek temizleme için kullanılabilir.
xsl:output Öğesi ve XmlWriter desteği
XslTransform sınıfı, dönüşüm çıkışı bir xsl:output
nesneye gönderildiğinde XmlWriter ayarlarını yoksaydı.
XslCompiledTransform sınıfının OutputSettings özelliği, stil sayfasının XmlWriterSettings öğesinden türetilen çıkış bilgilerini içeren bir xsl:output
nesnesi döndürür.
XmlWriterSettings nesnesi, doğru ayarlara sahip bir XmlWriter nesnesi oluşturmak ve bu nesneyi Transform yöntemine aktarmak için kullanılır. Aşağıdaki C# kodu bu davranışı gösterir:
// Create the XslTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(stylesheet);
// Load the file to transform.
XPathDocument doc = new XPathDocument(filename);
// Create the writer.
XmlWriter writer = XmlWriter.Create(Console.Out, xslt.OutputSettings);
// Transform the file and send the output to the console.
xslt.Transform(doc, writer);
writer.Close();
Hata Ayıklama Seçeneği
XslCompiledTransform sınıfı, Microsoft Visual Studio Hata Ayıklayıcısı ile stil sayfasında hata ayıklamanıza olanak tanıyan hata ayıklama bilgileri oluşturabilir. Daha fazla bilgi için bkz. XslCompiledTransform(Boolean).
Davranış Farklılıkları
XmlReader'a dönüştürme
XslTransform sınıfı, dönüşüm sonuçlarını XmlReader nesnesi olarak döndüren çeşitli aşırı yüklemelere sahiptir. Bu aşırı yüklemeler, elde edilen XML ağacının serileştirme ve seri durumdan çıkarma ek yüküne neden olmadan dönüştürme sonuçlarını bellek içi bir gösterime (c0 veya c1 gibi) yüklemek için kullanılabilir. Aşağıdaki C# kodu, dönüştürme sonuçlarının bir XmlDocument nesneye nasıl yükleneceklerini gösterir.
// Load the style sheet
XslTransform xslt = new XslTransform();
xslt.Load("MyStylesheet.xsl");
// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
doc.Load(xslt.Transform(input, (XsltArgumentList)null));
XslCompiledTransform sınıfı bir XmlReader nesneye dönüştürmeyi desteklemez. Ancak, elde edilen XML ağacını CreateNavigator ile doğrudan yüklemek için yöntemi kullanarak benzer bir XmlWriter işlem yapabilirsiniz. Aşağıdaki C# kodu, XslCompiledTransform kullanarak aynı görevi nasıl gerçekleştireceğinizi gösterir.
// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild()) {
xslt.Transform(input, (XsltArgumentList)null, writer);
}
İsteğe Bağlı Davranış
W3C XSL Dönüşümleri (XSLT) Sürüm 1.0 Önerisi, uygulama sağlayıcısının bir durumun nasıl ele alınabileceğine karar verebileceği alanları içerir. Bu alanlar isteğe bağlı davranış olarak kabul edilir. XslCompiledTransform öğesinin XslTransform sınıfından farklı davrandığı birkaç alan vardır. Daha fazla bilgi için bkz. Kurtarılabilir XSLT Hataları.
Uzantı Nesneleri ve Betik İşlevleri
XslCompiledTransform betik işlevlerinin kullanımıyla ilgili iki yeni kısıtlama getirir:
XPath ifadelerinden yalnızca genel yöntemler çağrılabilir.
Aşırı yüklemeler, bağımsız değişken sayısına göre birbirinden ayırt edilebilir. Birden fazla aşırı yükleme aynı sayıda bağımsız değişkene sahipse, bir özel durum oluşturulur.
XslCompiledTransform içinde, betik işlevlerine bağlama (metot adı arama) derleme aşamasında gerçekleşir ve XslTransform ile çalışan stil sayfaları, XslCompiledTransform ile yüklendiklerinde bir özel durum oluşturabilir.
XslCompiledTransform, msxsl:using
öğesi içinde msxsl:assembly
ve msxsl:script
alt öğelerini destekler.
msxsl:using
ve msxsl:assembly
öğeleri, betik bloğunda kullanılmak üzere ek ad alanlarını ve derlemeleri bildirmek için kullanılır. Daha fazla bilgi için bkz.: msxsl:script Kullanan Betik Blokları
XslCompiledTransform aynı sayıda bağımsız değişkene sahip birden çok aşırı yükleme içeren uzantı nesnelerini yasaklar.
MSXML İşlevleri
Ek MSXML işlevlerine destek XslCompiledTransform sınıfına eklendi. Aşağıdaki listede yeni veya geliştirilmiş işlevler açıklanmaktadır:
msxsl:node-set: XslTransformdüğüm kümesi İşlev işlevinin bağımsız değişkeninin bir sonuç ağacı parçası olması gerekiyordu. Sınıfın XslCompiledTransform bu gereksinimi yoktur.
msxsl:version: Bu işlev, XslCompiledTransform içinde desteklenir.
XPath uzantısı işlevleri: ms:string-compare İşlevi, ms:utc İşlevi, ms:namespace-uri İşlevi, ms:local-name İşlevi, ms:number İşlevi, ms:format-date İşlevi ve ms:format-time İşlevi işlevleri artık desteklenmektedir.
Şemayla ilgili XPath uzantısı işlevleri: Bu işlevler tarafından XslCompiledTransformyerel olarak desteklenmez. Ancak, uzantı işlevleri olarak uygulanabilirler.