Etiket: XSL

XML ve XSLT Dosyalarını İşleyerek Ekrana HTML Çıktısı Veren ASPX Sayfası

Nisan 15th, 2009

evet mutlaka vardır bu konularla ilgilenen, hoş ben daha benden başkasını görüp duymadım ama neyse :)

Elinizde source olarak XML var, XSLT kullanarak bu dosyayı işlemek istiyorsunuz. Bazı yardımcı programlarla testlerini, çıktılarını, görünümü görüp hoşunuza gidiyor. Fakat internete koymak bunu biraz daha kastırıcı :)

Şöyleki aşağıdaki gibi bir default.aspx dosyanızın olması gerekli. Ne anlattığımı anlamayanlar, birer adet XML, XSLT ve ASPX dosyası ile db’ siz ek sayfasız muazzam portaller hazırlayabileceklerini düşünsünler. Şimdilik ilk aşama olarak ASPX dosyamızın kaynak kodlarını veriyorum. Fazla zor bir yapısı yok, o yüzden fazla açıklama gereği görmedim, isteyen olursa seve seve anlatabilirim.

Not düşeyim bir de : Buradaki XML ve XSLT dosyaları temel olarak Biztalk Server ın temelidir, yani microsoft bu teknolojiler üzerine BTS’ i geliştirmiştir.

Default.ASPX

using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.IO;
using System.Reflection;
using System.Collections;
using System.Text.RegularExpressions;
using System.Web;
using System.Text;
using System;

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        DoPage();
    }

    protected void DoPage()
    {
        // XML Dokümanını yükle
        XmlDocument defaultXml = new XmlDocument();
        defaultXml.Load(HttpContext.Current.Server.MapPath("~/Data/Source.XML"));

        XslCompiledTransform myXsl = new XslCompiledTransform(true);

        XsltSettings xSet = new XsltSettings(true, true);

        xSet = XsltSettings.TrustedXslt;
        xSet.EnableDocumentFunction = true;
        xSet.EnableScript = true;

        XmlUrlResolver xr = new XmlUrlResolver();

        System.Security.PermissionSet ps = new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted);
        XmlSecureResolver sr = new XmlSecureResolver(new XmlUrlResolver(), ps);

        myXsl.Load(HttpContext.Current.Server.MapPath("~/Data/Proses.XSLT"), xSet, sr);

        XsltArgumentList myXslArguments = new XsltArgumentList();

        string n="";

        for (int i = 0; Request.QueryString.Count < i-1; ++i)
        {
            n = Request.QueryString.Keys[i].ToString();
            if (!(n.Equals("")))
                myXslArguments.AddParam(n, "", Request.QueryString.GetValues(i).ToString());
            n = "";
        }

        myXslArguments.AddParam("currentUser", "", User.Identity.Name);
        myXslArguments.AddParam("Browser", "", Request.Browser.Browser);

        System.IO.MemoryStream mIO = new MemoryStream();
        byte[] result;
        string myt;

        mIO.SetLength(0);
        myXsl.Transform(defaultXml, myXslArguments, mIO);

        result = mIO.ToArray();
        myt = Encoding.UTF8.GetString(result, 3, result.Length - 3);

        Response.Buffer = true;
        Response.ClearContent();
        Response.ClearHeaders();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "text/html";
        Context.Response.Write(myt);

        mIO.Close();

        Response.End();
    }

}

Tags: , , , , , ,
Posted in Yazılım | No Comments »