XslTransform Sınıfından Geçirme
XSLT mimarisi Visual Studio 2005 sürümünde yeniden tasarlandı. sınıfı XslTransform , sınıfıyla XslCompiledTransform değiştirildi.
Aşağıdaki bölümlerde ve sınıfları arasındaki XslCompiledTransform temel farklardan bazıları açıklanmaktadır XslTransform .
Performans
sınıfı XslCompiledTransform birçok performans geliştirmesi içerir. Yeni XSLT işlemcisi, XSLT stil sayfasını ortak dil çalışma zamanının (CLR) diğer programlama dillerinde yaptığı gibi ortak bir ara biçime kadar derler. Stil sayfası derlendiğinde önbelleğe alınıp yeniden kullanılabilir.
Sınıfı, XslCompiledTransform sınıftan çok daha XslTransform hızlı hale getiren diğer iyileştirmeleri de içerir.
Not
Sınıfın genel performansı sınıftan XslCompiledTransform daha iyi XslTransform olsa da, sınıfının yöntemi XslCompiledTransform bir Load dönüştürmede ilk kez çağrıldığında sınıfının yönteminden LoadXslTransform 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, betiği etkinleştirme ve XSLT dönüşümü gerçekleştirme işlemleri gösterilmektedir.
Not
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, nesnenin TempFileCollection 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
Dönüştürme XslTransform çıkışı bir XmlWriter nesneye gönderildiğinde sınıfı ayarları yoksaydıxsl:output
. sınıfı, XslCompiledTransform stil sayfasının öğesinden xsl:output
türetilen çıkış bilgilerini içeren bir nesne döndüren bir XmlWriterSettings özelliğe sahiptirOutputSettings. XmlWriterSettings nesnesi, yöntemine geçirilebilen doğru ayarlara sahip bir XmlWriter nesne oluşturmak için Transform 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 edinmek için bkz. XslCompiledTransform(Boolean).
Davranış Farklılıkları
XmlReader'a dönüştürme
sınıfı, XslTransform dönüştürme sonuçlarını nesne XmlReader olarak döndüren çeşitli Dönüştürme aşırı yüklemelerine 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 (veya XPathDocumentgibiXmlDocument) 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 doğrudan bir öğesinden yüklemek için yöntemini kullanarak benzer bir XmlWriterşey yapabilirsiniz. Aşağıdaki C# kodu, kullanarak XslCompiledTransformaynı görevi gerçekleştirmeyi 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. öğesinin sınıftan XslCompiledTransform farklı XslTransform 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.
içinde XslCompiledTransform, betik işlevlerine bağlama (yöntem adı arama) derleme zamanında gerçekleşir ve XslTransform ile çalışan stil sayfaları ile XslCompiledTransformyüklendiklerinde bir özel duruma neden olabilir.
XslCompiledTransformöğesinde msxsl:script
sahip olmayı msxsl:using
ve msxsl:assembly
alt öğeleri 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
Sınıfına ek MSXML işlevleri desteği XslCompiledTransform eklendi. Aşağıdaki listede yeni veya geliştirilmiş işlevler açıklanmaktadır:
msxsl:node-set: XslTransform düğü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 içinde XslCompiledTransformdesteklenir.
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.