آشنایی با کنترل XML در ASP.NET
امروزه بکارگیری فناوری XML در طراحی سایتها بسیار رواج یافته است و یکی از بیشترین موارد استفاده آن، نمایش اطلاعات یک فایل XML بصورت فرمت شده در صفحات وب است. به همین دلیل مایکروسافت یک کنترل را دقیقا” به همین منظور در ASP.NET قرار داده است.
سادهترین شکل استفاده از این کنترل به صورت زیر است:
<asp:xml DocumentSource=”MyFile.xml” id=”xml1″ Runat=”server” />
با اضافهکردن خط بالا به یک صفحه، محتویات فایل MyFile.xml بطور خودکار به صفحه اضافه خواهد شد. روش دیگر، قرار دادن محتویات سند به شکل XML بین تگهای <asp:xml> و <asp:xml/> بصورت زیر است:
<asp:xml id="xml1" Runat="server">
<Books>
<Book>Sample Book 1</Book>
<Book>Sample Book 2</Book>
</Books>
</asp:xml>اما اگر سند XML بصورت یک فایل ذخیره شده روی دیسک وجود نداشته باشد و برای مثال براساس اطلاعات موجود در دیتابیس در زمان درخواست صفحه ساخته شود، این روش قابل استفاده نخواهد بود. در این حالت باید از خاصیت Document در کد صفحه استفاده کرد و یک شیئ از نوع System.Xml.XmlDocument را به آن نسبت داد. مثال زیر یک سند XML ساخته و آن را توسط کنترل xml1 نمایش میدهد:
XmlDocument doc = new XmlDocument();
XmlElement elem = doc.CreateElement("Price");
elem.InnerText="24.95";
doc.AppendChild(elem);
Xml1.Document = doc;در بیشتر موارد نشان دادن اطلاعات فایل XML به تنهایی کافی نیست و باید از یک فایل XSL نیز برای تعیین نحوه نمایش اطلاعات استفاده کرد. برای این کار دو خاصیت Transform و TransformSource در این کنترل قرار داده شدهاند. خاصیت Transform تنها هنگام نوشتن کد قابل استفاده است و باید به آن یک شیئ از نوع System.Xml.Xsl.XslTransform نسبت داد. اما خاصیت TransformSource هنگام طراحی صفحه نیز قابل دسترسی است و میتوان از آن برای مشخص کردن نام و مسیر فایل XSL استفاده کرد. مثال زیر فایل MyFile.xml را توسط فایل MyTransform.xsl فرمت کرده و نمایش میدهد:
<asp:xml DocumentSource=”MyFile.xml” TransformSource=”MyTransform.xsl” id=”xml1″ Runat=”server” />
کد زیر نیز دقیقا” کار مثال بالا را انجام میدهد، با این تفاوت که بجای خاصیتهای DocumentSource و TransformSource از خاصیتهای Document و Transform استفاده میکند:
XmlDocument doc = new XmlDocument();
XslTransform trans = new XslTransform();
doc.Load(MapPath("MyFile.xml"));
trans.Load(MapPath("MyTransform.xsl"));
Xml1.Document = doc;
Xml1.Transform = trans;
نکتهای که باید به آن توجه داشت این است که اگر شما همزمان از سه خاصیت DocumentContent ،DocumentSource ،Document و یا خاصیتهای Transform و TransformSource استفاده کنید، تنها آخرین موردی که مشخص کردهاید مورد استفاده قرار خواهد گرفت و بقیه موارد نادیده گرفته خواهند شد