اشياء XML DOM
در صورت مشاهده صفحه فوق در مرورگر
بازيابی اولين گرهpc |
برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان JavaScript نوشته شده اند .( نسخه فوق با نسخه نوشته شده توسط VBScript دارای اختلاف اندکی می باشند ) . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .
مثال : بازيابی اولين گره موجود در سند mycomputer.xml ( نسخه JavaScript) |
<HTML> |
در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد :
بازيابی اولين گرهpc |
در ادامه بخش های متفاوت دو مثال فوق تشريح خواهند گرديد .
استقرار يک سند XML در حافظه
قبل از انجام هر گونه عمليات در رابطه با يک سند XML ، می بايست سند فوق در حافظه مستقر گردد . قبل از استقرار سند XML در حافظه ، می بايست نمونه ای از شی XML DOM را ايجاد نمود. کدهای زير که در مثال اول ( نسخه نوشته شده به زبان VBScript) ارائه شده اند ، نحوه ايجاد يک نمونه شی XML -DOM را با استفاده از متد CreateObject و استقرار يک سند XML را نشان می دهد .
مثال : کدهای لازم بمنظور ايجاد يک نمونه شی XML DOM و استقرار سند XML در حافظه |
Set xmlDoc = CreateObject("Microsoft.xmldom") |
در مثال فوق ،از متد async مربوط به شی document بمنظور استقرار سند XML در حافظه بصورت همزمان استفاده شده است . بدين ترتيب مرورگر قبل از انجام هر گونه پردازش بر روی سند XML ، در انتظار استقرار تمام سند در حافظه باقی خواهد ماند . در صورتيکه از کد فوق استفاده نگردد ، مرورگر بمحض دريافت بخشی از سند ، عمليات پردازش را آغاز خواهد کرد . در برنامه فوق از متد Load بمنظور استقرار يک فايل XML در حافظه استفاده شده است . در صورتيکه قصد استقرار يک سند XML را از طريق يک رشته داشته باشيم ، می توان از متد LoadXML استفاده کرد .
در نسخه جاوا اسکريپت مثال فوق ،با استفاده از شی AxtiveXObject يک نمونه از شی XML DOM ايجاد شده است . کدهای فوق بصورت زير می باشند :
مثال : کدهای لازم بمنظور ايجاد يک نمونه شی XML DOM و استقرار سند XML در حافظه |
xmlDoc = new ActiveXObject("Microsoft.xmldom") |
المان سند
کد زير بمنظور بازيابی يک مرجع به المان سند ( گره مادر در سند XML) استفاده شده است :( نسخه نوشته شده به زبان VBScript)
Set xmlRoot = xmlDoc.documentElement |
کد معادل جاوا اسکريپت بصورت زير است :
xmlRoot = xmlDoc.documentElement |
مجموعه ChildNodes
پس از ايجاد يک مرجع به گره Document ، می توان با استفاده از مجموعه childNodes مربوط به گره Document اقدام به بازيابی گره ها نمود . کد زير ، يک مرجع ( اشاره گر ) به اولين گره مجموعه childNodes مربوط به المان سند ، ايجاد می نمايد
Set xmlNode = xmlRoot.childNodes(0) |
کد معادل جاوا اسکريپت بصورت زير است :
xmlNode = xmlRoot.childNodes(0) |
تمام مجموعه ها در XML با صفر شروع می گردد . بنابراين اولين المان همواره صفر، دومين المان يک و ... خواهد بود.
نمايش XML بر روی صفحه
بمنظور نمايش داده های XML در يک صفحه Html ، می بايست از روش های خاصی استفاده نمود. يکی از مناسبترين اين روش ها ، استفاده از خصلت innerHTML يک تگ Html است . کد زير نحوه انجام عمليات فوق را نشان می دهد ( نسخه VBScript) . در کد فوق از خصلت nodeName مربوط به گره ، برای بدست آوردن نام المان XML استفاده شده است .
divHere.innerHTML = "<H3>" & xmlNode.nodeName & "</H3>" |
کد زير نحوه نمايش داده های XML در يک صفحه Html را با استفاده از خصلت innerHTML نشان می دهد ( نسخه حاوا اسکريپت )
divHere.innerHTML ="<H3>" + xmlNode.nodeName + "</H3>" |
صدا زدن کدهای اسکريپت DOM
در مثال های ارائه شده ( نسخه نوشته شده با VBScript و نسخه نوشته شده با جاوا اسکريپت ) ،از تابعی با نام getXML همزمان با فعال شدن صفحه استفاده شده است . تابع فوق مسئول استقرار سند XML در حافظه و يافتن اولين المان در بوده و ماحصل عمليات را در خروجی نمايش خواهد داد .
<BODY onload="getXML()"> |
پس از ارائه توضيحات لازم در خصوص مثال های ارائه شده ، در ادامه نحوه انجام ساير عمليات بر روی يک سند XML بکمک XML DOM تشريح می گردد .
تکرار در بين گره های يک سند
سند XML ارائه شده در مثال قبل (mycomputer.xml) دارای ساختار درختی زير است :
با استفاده از مجموعه childNodes ، می توان عمليات تکرار در بازيابی تمام درخت XML مربوط به يک سند XML را انجام داد . برنامه زير تمام اطلاعات موجود در درخت XML را بازيابی و آنها را با يک فرمت قابل قبول ( مجموعه ای از جداول ) در خروجی نمايش خواهد داد . در اين برنامه اطلاعات مربوط به اولين سطح گره های موجود ( pc,case,docking_station) با استفاده از يک حلقه تکرار استخراج و برای بازيابی اطلاعات موجود در دومين سطح گره ها ( type, brand, model ) از يک حلقه تکرار ديگر استفاده شده است .
مثال : بازيابی تمام گره های موجود در يک سند XML و نمايش آنها با يک فرمت مناسب |
||||||||||||||||||||||||
<HTML> |
||||||||||||||||||||||||
خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به شکل زير خواهد بود : بازيابی تمام المان های يک سند XMLpc
docking_stationNo data case
|
نسخه جاوا اسکريپت برنامه فوق به شکل زير است : ( فقط حلقه های تکرار مشخص شده اند )
مثال : بازيابی تمام گره های موجود در يک سند XML (نسخه جاوااسکريپت ) |
xmlRoot = xmlDoc.documentElement |
بازيابی يک گره خاص و يا مجموعه ای از گره ها
در برخی حالات علاقه مند به بازيابی گره ها از طريق حلقه تکرار نمی باشيم ، در چنين مواردی می توان مستقيما" اقدام به بازيابی مجموعه ای از گره ها در يک سند XML نمود . در اين رابطه می توان از متد getElementsByTagName استفاده کرد . گرامر استفاده از متد فوق بشکل زير است :
nodelist = document.getElementsByTagName(tagname) |
در گرامر فوق :
-
nodelist ، يک شی از نوع nodelist است .
-
document ، يک شی از نوع document است .
-
tagname ، رشته ای بمنظور مسخص نمودن يک المان است . مثلا" "case/brand" . برای بازيابی تمام درخت XML می توان از "*" استفاده کرد .
متد getElementsByTagName ، يک شی nodeList را بر می گرداند . شی nodeList ذاتا" معادل مجموعه childNodes است . شی فوق دارای يک خصلت ( lenght) و سه متد ( item,nextNode,reset) است . از متد item مربوط به شی nodeList بمنظور بازيابی يک آيتم از مجموعه گره های موجود در nodeList استفاده می گردد . در مثال زير از متد getElementsByTagName بمنظور بازيابی متن مربوط به المان pc/ram استفاده شده است .
مثال : بازيابی يک المان خاص با استفاده از متد getElementsByTagName ( نسخه Vbscript) |
Function getXML() |
مثال: بازيابی يک المان خاص با استفاده از متد getElementsByTagName ( نسخه javascript) |
function getXML() { |
بازيابی خصلت ها
تمام اطلاعات در سند های XML از طريق محتويات المان ها ذخيره نشده و در برخی حالات از خصلت مربوط به يک المان استفاده و اطلاعات بکمک آن ذخيره می گردد . بمنظور بازيابی اطلاعات ذخيره شده در خصلت مربوط به يک المان می توان از مجموعه attributes استفاده کرد . برای ارائه توضيحات کاربردی بيشتر ، فايل mycomputer.xml ( در مثال های قبل از آن استفاده شده بود ) را با اندک تغييراتی که عمدتا" به استفاده از خصلت بهمراه المان ها بر می گردد ، تغيير نام و يک فايل ديگر با نام mycomputer1.xml را ايجاد که تگ های pc و case آن بصورت زير باشند :
<pc type="Laptop" brand="Toshiba" model="Tecra 8000"> |
برنامه زيرخصلت های مربوط به المان PC را در خروجی نمايش می دهد .
مثال : نمايش خصلت های يک المان ( نسخه VBScript) |
<HTML> |
خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به صورت زير است :
بازيابی خصلت های يک المان
|
مثال : نمايش خصلت های يک المان ( نسخه JavaScript) - فقط حلقه تکرار آورده شده است . |
for (intI=0;intI <= xmlPCNode.attributes.length-1;intI++) { |
بمنظور بازيابی محتويات يک خصلت خاص، می توان از متد getAttribute مربوط به شی node استفاده کرد . مثلا" کد زير خصلت brand مربوط به المان case را بازيابی می نمايد :
Set xmlNodes = xmlDoc.getElementsByTagName("case") |
تاکنون به بررسی برخی از امکانات XML DOM بصورت بسيار محدود اشاره شد. XML DOM دارای مجموعه ای از خصلت ها و متد ها ی متنوع ديگر است . شرکت ماکروسافت نيز مجموعه ای ديگر از خصلت ها و متدها را در اين زمينه تعريف نموده است . بهرحال برای انجام يک عمليات بخصوص می توان از روش های متعددی استفاده و در اين زمينه يک راه حل شفاف و منحصر بفرد وجود ندارد .
استفاده از XML بر روی سرويس دهنده
تمام مثال های ارائه شده در بخش های قبل ، فايل های XML را بر روی سرويس گيرنده پردازش می کردند. بمنظور پردازش فايل های XML بر روی سرويس دهنده ، می توان از عنصر XMLDOM از طريق صفحات ASP استفاده کرد . برنامه زير اطلاعات موجود در فايل mycomputer.xml ( در بخش های قبل از آن استفاده شده است ) را پردازش و با يک فرمت مناسب ( استفاده از سه جدول مجزا برای نمايش هر يک از المان های سطح اول ) در خروجی نمايش می دهد . ( نظير اين عمليات در بخش های قبل نيز ارائه گرديد در اين مثال عمليات مورد نظر بر روی سرويس دهنده انجام خواهد شد ) .
مثال : پردازش يک فايل XML برروی سرويس دهنده و ارائه خروجی مناسب |
<%@ Language=VBScript %> |
پس از انجام پردازش های لازم بر روی سرويس دهنده ، خروجی مناسب برای نمايش در مرورگر ارسال خواهد شد . پردازش فايل XML وابسته به امکانات موجود در مرورگر نبوده و صرفا" مرورگرها ، نمايش دهنده اطلاعات ارسالی از سرويس دهنده خواهند بود .
نظرات شما عزیزان: