XML در دات نت
ايجاد يک فايل
XML در سال 1996 توسط کنسرسيوم وب ( گروه کاری XML ) پياده سازی شده است . استاندارد باز و مستقل از پلت فرم بودن از جمله مهمترين ويژگی های XML محسوب می گردد. XML از آن زمان تاکنون دستخوش تغييرات متعددی شده و از آن در ابعاد گسترده ای نظير ذخيره سازی داده های مورد نياز که می بايست بين برنامه ها منتقل گردند، استفاده می شود ( خصوصا" برنامه هائی که بر روی اينترنت اجراء می گردند ) .
XML در دات نت
• System.Xml ، مهمترين namespace ارائه شده در دات نت می باشد که اشياء سازگار با نسخه XML کنسرسيوم وب و مجموعه ای از اشياء جانبی به منظور کار با اسناد XML را ارائه می نمايد .با استفاده از اشياء سازگار با XML ارائه شده توسط کنسرسيوم وب ، امکان دستيابی به گره های موجود در يک سند XML فراهم می گردد . در اين رابطه اشياء reader و writer به منظور دستيابی به فايل های XML موجود بر روی ديسک و کلاسی به منظور بررسی اعتبار اسناد XML در مقابل يک DTD و يا XML Schema ، ارائه شده است .
• System.Xml.XPath . با استفاده از XML Path Language) XPath )، امکان دستيابی و پردازش بخش هائی خاص ازيک سند XML فراهم می گردد. مثلا" می توان عبارت خاصی را ايجاد نمود که گره های خاصی را در يک سند XML و بر اساس نام ، نوع و يا مقدار پيدا نمايد . به عبارات فوق ، XPath Queries گفته می شود . namespace فوق مجموعه ای از اشياء Navigator به منظور انجام عمليات تکراری در يک سند XML را نيز ارائه نموده است . System.Xml.XPath اينترفيس DOM کنسرسيوم وب را حمايت نمی نمايد .
• System.Xml.Xsl .از ( XSL ( eXtensible Stylesheet Language به منظورتعريف فرمت مورد نظر برای داده های XML استفاده می گردد . کلاس فوق ، اشياء لازم به منظور تبديل اسناد XML که از آن با نام XSLT ياد می شود را نيز ارائه می نمايد . XSLT فرآيندی است که در آن با استفاده از يک سند XML ، اسناد مبتنی بر text ايجاد می گردند . namespace فوق ، همچنين يک کلاس به منظور پاس دادن آرگومان به يک XSLT Stylesheet برای تبديل شرطی را ارائه نموده است .
علاوه بر سه namespace اشاره شده از دو namespace ديگر به نام System.Xml.Schema و System.Xml.Serialization به منظور انجام عمليات خاص در ارتباط با استاد XML ، استفاده می شود .
ايجاد يک سند XML با استفاده از XmlTextWriter
جدول زير مهمترين متدهای اين کلاس را نشان می دهد :
کاربرد | متد |
از متد فوق به منظور شروع يک سند XMLو درج اولين خط در آن که شامل معرفی فايل XMLو نحوه encodingاست ، استفاده می گردد. | WriteStartDocument() |
از متد فوق به منظور ايجاد يک عنصر جديد در سند XMLاستفاده می گردد . نام عنصر جديد توسط رشته ورودی مشخص می شود . | WriteStartElement(string) |
از متد فوق به منظور ايجاد يک عنصر جديد در سند XMLاستفاده می گردد . نام عنصر جديد و مقدار متناظر با آن توسط پارامترهای ورودی مشخص می گردد. | WriteElementString(name, text_value) |
از متد فوق به منظور ايجاد يک خصلت و نسبت دهی مقدار مورد نظر به آن استفاده می شود . خصلت ايجاد شده به عنصر جاری سند XMLنسبت داده می شود . | WriteAttributeString(name, value) |
از متد فوق به منظور بستن عنصری که توسط متد WriteStartElementايجاد شده است ، استفاده می گردد . | WriteEndElement() |
از متد فوق به منظور اتمام عمليات نوشتن در سند XMLاستفاده می گردد . | WriteEndDocument() |
از متد فوق به منظور نوشتن محتوای سند XMLبه فايل مشخص شده در يک آدرس خاص، استفاده می گردد . | Close() |
به منظور شروع کار با کلاس XmlTextWriter می بايست يک فايل و نحوه encoding آن مشخص گردد. encoding می بايست از نوع System.Text.Encoding باشد . ( مثلا" System.Text.Encoding.ASCII ، System.Text.Encoding.Unicode و يا System.Text.Encoding.UTF8 ) .
مثال : استفاده از XmlTextWriter به منظور ايجاد يک فايل XML
<userInfo> |
مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر
<%@ Import Namespace="System.Xml" %> |
خواندن يک فايل
• پارسرهای ( DOM : ( Document Object Model ، يک ساختار درختی از سند XML را در حافظه ايجاد نموده و امکان حرکت بر روی گره ها و يا خصلت های متفاوتی را در اختيار قرار می دهند.
• پارسرهای ( SAX : ( Simple API for XML ، سندهای XML را به صورت ترتيبی پردازش نموده و نسبت به پارسرهای DOM حافظه بمرابت کمتری را اشغال می نمايند .
در MSXML ver 3.0 ، شرکت مايکروسافت دو پارسر فوق را ارائه نموده است . در دات نت نيز از پارسر DOM که دارای سازگاری و شباهت بسيار زيادی با MSXML است و پارسر SAX که دستخوش تغييرات متعددی نسبت به گذشته شده است ، استفاده می گردد . پارسرهای قبل از دات نت ، (مثلا" پارسر MSXML ) کلاس ها و اينترفيس های متعددی را به منظور انجام عمليات متقاوت بر روی اسناد XML ارائه نموده که با استاندارد پيشنهادی کنسرسيوم وب ، سازگاری و نزديکی قابل توجهی دارد. در دات نت علاوه بر استمرار وضعيت فوق ، روش های ساده و انعطاف پذيری به منظور کار بر روی اسناد XML ارائه شده است .
کلاس XmlTextReader
کلاس XmlTextReader روشی سريع و موثر به منظور parse نمودن اسناد XML را ارائه می نمايد. کلاس فوق از حافظه بطرز کاملا" حساب شده و بهينه ای استفاده می نمايد. صرفا" گره جاری در حافظه نگهداری می گردد ( Cached ) و عنصری که قبلا" parse شده است در حافظه وجود نخواهد داشت . در صورتی که به وجود عناصر قبلی نياز باشد ، می بايست فايل XML مجددا" از ابتدا و به صورت forward-only خوانده شود. کلاس فوق از XmlReader به ارث رسيده و متعلق به System.Xml می باشد .
با استفاده از متدها و خصلت های ارائه شده توسط کلاس فوق، می توان بسادگی به محتوا و عناصر موجود در يک سند XML دست يافت . متدهای ارائه شده همواره گره جاری را برمی گردانند و در ادامه می توان عمليات مورد نظر را بر روی آنان انجام داد .
به منظور استفاده از کلاس XmlTextReader می بايست از System.Xml استفاده و يک نمونه از کلاس فوق را ايجاد نمود .
Dim reader As XmlTextReader |
به منظور خواندن محتوای يک سند XML از متد Read و در يک ساختار تکرار استفاده می نمائيم .
Do while reader.read () |
در صورتی که يک گره با موفقيت خوانده شود، مقدار True برگردانده شده و در ادامه می توان با استفاده از متدها و خصلت های ارائه شده ، عمليات مورد نظر را انجام داد. بررسی نوع يک گره ، دستيابی به خصلت هائی خاص و يا محتوای يک گره نمونه هائی در اين زمينه می باشد .
جدول زير مهمترين متدها و خصلت های کلاس XmlReaderClass را نشان می دهد .
کاربرد | متد / خصلت |
متد فوق ، cursorرا بر روی گره بعدی قرار داده و درصورتی که گره با موفقيت خوانده شود ، مقدار trueرا بر می گرداند . از متد فوق در يک ساختار تکرار و به منظور خواندن و انجام پردازش های لازم در خصوص اسناد XMLاستفاده می گردد . | Read() |
خصلت فوق نوع گره را بر می گرداند ( المان ، متن و يا ساير موارد ). | NodeType |
خصلت فوق، نام گره جاری را بر می گرداند . | Name |
خصلت فوق ، محتوای گره را بر می گرداند . | Value |
محتوای يک گره را بر اساس يک نوع داده خاص برمی گرداند. مثلا" متد ReadStringمحتوای يک گره را به صورت يک رشته برمی گرداند . | ReadString(), Readxxxx().... |
متد فوق ، مقدار خصلتی را که به عنوان پارامتر در اختيار آن گذاشته شده است ، برمی گرداند . | GetAttribute("attb_name") |
در صورتی که گره ای دارای يک خصلت باشد، مقدار trueو در غيراينصورت مقدار False، برگردانده می شود . | HasAttributes |
در اين مثال قصد داريم فايل Visitors.xml را که در مقاله "XML در دات نت : ايجاد يک فايل با نحوه ايجاد آن آشنا شديم را خوانده و عناصر موجود در آن را به همراه مقادير نسبت داده شده به هر يک در خروجی نمايش دهيم .
محتوای فايل Visitors.xml |
<?xml version="1.0" encoding="utf-8"?> |
مرحله اول : تايپ کد زير با استفاده از يک ويرايشگر
<%@ Import Namespace="System.Xml" %> |
تبديل اسناد XML
در اين مقاله قصد داريم با تاکيد بر تکنولوژی های سمت سرويس دهنده به نحوه تبديل اسناد XML در محيط دات نت اشاره نمائيم .
برای دستيابی به اسناد XML با استفاده از تکنولوژی های سمت سرويس گيرنده می توان از روش های متفاوتی استفاده نمود :
• اسناد XML مبتنی بر فايل : استفاده از فايل های XML و XSLT به عنوان ورودی و تبديل اسناد XML به XHTML به منظور نمايش توسط مرورگر
• اسناد XML مبتنی بر حافظه :استفاده از استاندارد Document Object Model )DOM ) به منظور دستيابی و پردازش اسناد XML
• اسناد XML مبتنی بر Stream : ارائه يک روش ساده به منظور خواندن و نوشتن اسناد XML که در هر لحظه يک عنصر توليد خواهد شد .
پردازش های سمت سرويس دهنده در محيط دات نت انجام می شود .مثلا" در روش دستيابی مبتنی بر فايل ، فريمورک دات نت يک کنترل سرويس دهنده را ارائه نموده است که با استفاده از يک فايل XML و يک فايل XSLT ، خروجی مناسب به منظور نمايش در صفحات وب توليد می گردد . در روش دستيابی مبتنی بر حافظه ، فريمورک دات نت امکانات لازم به منظور پردازش اسناد XML را متناسب با استاندارد DOM مربوط به کنسرسيوم وب ارائه نموده است . در روش دستيابی مبتنی بر Stream نيز کلاس های لازم به منظور خواندن و يا نوشتن اطلاعات در فايل های XML ارائه شده است .
در تمامی مثال هائی که در ادامه به بررسی آنان خواهيم پرداخت از فايل XML زير ( SrcoArticles.xml ) استفاده شده است . فايل فوق ، حاوی ليستی ساده از مقالات است .
<?xml version="1.0" encoding="Utf-8"?> |
تبديل فايل های XML با استفاده از فايل های XSLT
کنترل <asp:xml> در محل مورد نظر به منظور نمايش خروجی در يک صفحه وب قرار می گيرد . کنترل فوق از دو خصلت به منظور مشخص نمودن فايل های XML و فايل XSLT استفاده می نمايد . شکل عمومی استفاده از کنترل فوق به صورت زير است :
<asp:Xml DocumentSource="path" TransformSource="path" runat="server"/> |
خصلت های DocumentSource و DocumentTransform به ترتيب مسير استقرار فايل های XML و XSLT را مشخص می نمايند .
فايل SrcoArticles.xsl که از آن به منظور تبديل فايل SrcoArticles.xml استفاده شده است :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
استفاده از کنترل <asp:lable> در يک صفحه وب ASP.NET ( فايل XmlTransform1.aspx )
<script runat="server" language="vb"> |
تبديل اسناد DOM با اسنتفاده از XSLT
مثال : در اين مثال فايل SrcoArticles.Xml به عنوان يک سند DOM و فايل SrcoArticles.Xsl به عنوان يک سند تبديل در حافظه مستقر شده و در ادامه با استفاده از کنترل <asp:xml> و اسکريپت های نوشته شده ، عمليات تبديل انجام خواهد شد . به منظور تبديل فوق کنترل <asp:xml> از دو خصلت متفاوت می نمايد :
|
خصلت Document به يک سند DOM ( يک سند XML که درون DOM لود شده است ) اشاره می نمايد . خصلت Transform به يک سند تبديل اشاره می نمايد ( يک فايل XSLT که به درون DOM لود شده است ) . برخلاف حالتی که خصلت های DocumentSource و TransformSource مستقيما" در کنترل <asp:xml> استفاده و به آنان مراجعه می گرديد ، از خصلت های فوق نمی توان به عنوان خصلت های همراه کنترل استفاده نمود . امکان بکارگيری خصلت های فوق صرفا" از طريق اسکريپت های مورد نظر امکان پذير می باشد . در چنين مواردی کنترل <asp:xml> می بايست دارای يک مشخصه خاص ( id ) باشد تا اسکريپت های مورد نظر با استفاده از آن قادر به انجام فرآيند تبديل باشد .
< asp:xml id="TransformOut" runat="server"/> |
ايجاد يک سند DOM
Dim document As XmlDocument |
متد Load شی XmlDocument يک فايل XML را به عنوان ورودی گرفته و آن را به صورت يک درخت در حافظه مستقر می نمايد ( يک نمايش درخت گونه از سند XML در حافظه ) . Path مسير فيزيکی به فايل XML را مشخص می نمايد . در چنين مواردی می توان از متد MapPath به منظور تبديل يک آدرس نسبی به مسير کامل فيزيکی نيز استفاده نمود .
XmlDocument يکی از اشياء قدرتمند در ارتباط با فايل های XML است که به برخی از ويژگی های مهم آن اشاره می گردد :
• مسئوليت پياد ه سازی اينترفيس استاندارد DOM مربوط به کنسرسيوم وب را برعهده دارد.( متعلق به System.Xml )
• استقرار يک سند XML در حافظه به صورت يک نمايش درختی
• امکان دستيابی به هر گره موجود در سند XML
• ارائه يک روش کاملا" انعطاف پذير به منظور دستيابی به هر گره مورد نياز در سند XML در مقايسه با اشياء XmlTextReader و XmlTextReader که صرفا" امکان دستيابی به صورت Forward only را فراهم می نمايند .
• خصلت ها و متدهای متعددی به منظور پردازش اسناد XML مستقر در حافظه را ارائه می نمايد .
• مهمترين نکته قابل تامل در خصوص اينترفيس DOM ، استقرار تمامی داده XML در حافظه است . بنابراين در صورت بالا بودن حجم سند XML ، حافظه زيادی مصرف می شود . در مواردی که با محدوديت حافظه مواجه هستيم می توان از روش های مبتنی بر Forward-only استفاده نمود .
ايجاد يک سند تبديل
Dim document As XslTransform |
کدهای لازم به منظور تبديل
<%@ Import Namespace="System.Xml" %> |
عبارات ديگر تبديل
Dim SrcoDOM As New XmlDocument() |
در روشی ديگر، می توان يک فايل XML را با استفاده از خصلت DocumentSource مربوط به کنترل <asp:xml> مشخص نمود و به موازات آن فايل XSLT را با استفاده از اسکريپت هائی که مقدار مورد نظر را به خصلت Transform نسبت می دهد ، استفاده نمود .
Dim SrcoDOM As New XmlDocument() |