DOM)Document Object Model) يک رابط برنامه نويسي براي سندهاي XML و Html است . با استفاده از اينترفيس فوق، نحوه دستيابي و انجام پردازش هاي لازم در رابطه با سند هاي XML و Html فراهم مي گردد . برنامه نويسان با استفاده از DOM ، قادر به ايجاد يک سند ،حرکت در طول ساختار سند، افزودن ، اصلاح و يا حذف المان هاي يک سند XML و يا Html مي باشند . DOM توسط کنسرسيوم وب استاندارد و بمنظور استفاده از طريق زبان هاي برنامه نويسي متعددي طراحي شده است .
گره ها
برنامه اي با نام پارسر، امکان استقرار يک سند XML در حافظه را فراهم مي نمايد . پس از استقرار سند در حافظه ، اطلاعات مربوطه بکمک DOM ، قابل بازيابي و پردازش خواهد بود . DOM ، يک نمايش شبه درختي از يک سند XML را ايجاد مي نمايد . المان Document ، داراي بالاترين سطح در درخت ايجاد شده است . المان فوق ، داراي يک و يا چندين فرزند است . يک اينترفيس گره ، امکان خواندن و يا نوشتن المان هاي خاصي در ساختار درختواره اي يک سند XML را ميسر مي نمايد .با استفاده از خصلت ChildNodes مربوط به المان Document و بکارگيري يک حلقه تکرار مي توان هر يک از گره ها را انتخاب و در ادامه عمليات مورد نظر در رابطه با آن را انجام داد . پارسر شرکت ماکروسافت (MSXML) ، داراي توابع متفاوت بمنظور حرکت در طول درخت، دستيابي به گره ها بهمراه خصلت مربوطه، درج و حذف گره ها و تبديل ساختار درختي به شکل اوليه XML است . در حال حاضر، سيزده نوع متفاوت گره توسط پارسرشرکت ماکروسافت، حمايت مي گردد . جدول زير متداولترين نوع گره ها را نشان مي دهد .
مثال |
نوع گره |
<!DOCTYPE food SYSTEM "food.dtd"> |
Document type |
<?xml version="1.0"?> |
Processing instruction |
<drink type="tea">Irani</drink> |
Element |
type="tea" |
Attribute |
Irani |
Text |
استفاده از پارسر
بمنظور خواندن، ويرايش و يا ايجاد و پردازش يک سند XML ، مي بايست از يک پارسر استفاده کرد . پارسر شرکت ماکروسافت، يک عنصر مبتني بر COM بوده که بهمراه IE نسخه پنج ، ارائه شده است . پس از نصب مرورگر فوق، امکان استفاده از پارسر فراهم مي گردد . پارسر MSXML ، داراي امکانات متعدد برنامه نويسي بمنظور استفاده توسط زبانهاي زير است :
-
حمايت از جاوااسکريپت VBScript Perl جاوا و ++ C
-
حمايت از استاندارد کنسرسيوم وب و XML DOM
-
حمايت از DTD و معتبر سازي
مثال : نحوه ايجاد شي Document ، با استفاده جاوااسکريپت ، VBscript و ASP در جدول زير نشان داده شده است :
مثال |
تکنولوژي |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") |
Javascript |
set xmlDoc = CreateObject("Microsoft.XMLDOM") |
VBscript |
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") |
ASP |
استقرار يک سند XML در حافظه
کدهاي زير نحوه استقرار يک سند XML با نام Test.xml در حافظه را نشان مي دهد :
استقرار يک سند XML در حافظه |
<script language="JavaScript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("Test.xml") // ....... پردازش هاي لازم </script> |
اولين خط در اسکريپت هاي فوق ، يک نمونه از پارسر XML شرکت ماکروسافت را ايجاد مي نمايد . در دومين خط ، به پارسر اعلام مي گردد منتظر دريافت کامل سند XML بوده قبل از اينکه پردازش خود را آغاز نمايد . در سومين خط ، به پارسر اعلام شده است که يک سند XML با نام Test.xml را در حافظه مستقر نمايد .
استقرار متن XML در پارسر
کدهاي زير، نحوه استقرار يک رشته متن را در پارسر XML نشان مي دهد . در مثال فوق از متد LoadXML در مقابل متد load استفاده شده است . از متد loadXML بمنظور استقرار يک رشته متن در پارسر استفاده مي گردد .
استقرار يک رشته متن XML در حافظه |
<script language="JavaScript"> var text="<note>" text=text+"<to>Ali</to><from>Reza</from>" text=text+"<heading>Reminder</heading>" text=text+"<body>Don't forget me this weekend!</body>" text=text+"</note>" var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.loadXML(text) // ....... پردازش هاي لازم </script> |
شي ParseError
خطاي مربوط به فايل : با استفاده از شي ParseError ، مي توان از کد ، متن خطاء و حتي شماره خطي که خطاء در آن اتفاق افتاده است ، آگاهي يافت . در برنامه زير پارسر، سعي در استقرار سندي XML در حافظه نموده که وجود خارجي ندارد . پس از تشخيص خطاء ، برخي از خصلت هاي مربوط به خطاء در خروجي نمايش داده خواهد شد .
تشخيص خطاء و استفاده از شي ParseError در رابطه با وجود يک فايل |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("Test1.xml") document.write("<br>Error Code: ") document.write(xmlDoc.parseError.errorCode) document.write("<br>Error Reason: ") document.write(xmlDoc.parseError.reason) document.write("<br>Error Line: ") document.write(xmlDoc.parseError.line) |
خطاي مربوط به XML . فرض کنيد يک سند XML که "خوش شکل " نمي باشد، توسط پارسر خوانده شود . کدهاي زير نحوه تشخيص و برخورد با خطاء را نشان مي دهد :
تشخيص خطاء و استفاده از شي ParseError در رابطه با سند "خوش شکل " |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("note_error.xml") document.write("<br>Error Code: ") document.write(xmlDoc.parseError.errorCode) document.write("<br>Error Reason: ") document.write(xmlDoc.parseError.reason) document.write("<br>Error Line: ") document.write(xmlDoc.parseError.line) |
خصلت هاي ParseError
عملکرد |
خصلت |
کد خطاي بوجود آمده ، برگردانده مي شود . |
errorCode |
علت خطاي بوجود آمده ،برگردانده مي شود . |
reason |
شماره خط خطاي بوجود آمده ، برگردانده مي شود |
line |
محل بروز خطاء در خط مربوطه را برمي گرداند . |
linePos |
رشته اي که شامل خط مربوط به خطاي بوجود آمده است، برگردانده مي شود |
srcText |
url مربوط به سند مستقر سده در حافظه ، بر گردانده مي شود . |
url |
محل بروز خطاء در فايل مربوطه، برگردانده مي شود . |
filePos |
حرکت در طول درخت
يکي از متداولترين روش هاي بازيابي المان هاي يک سند XML ، حرکت در طول درخت ( از گره اي به گره ديگر ) و استخراج مقدار متن ذخيره شده بهمراه هر يک از المان ها است . کدهاي نوشته شده زير ، امکان حرکت در طول يک درخت XML را فراهم و در ادامه هر يک از المان هاي سند XML ، در خروجي نمايش داده مي شوند ( کدها با استفاده از VBScript نوشته شده اند ) .
حرکت در طول درخت و نمايش المان هاي يک سند XML |
set xmlDoc=CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("note.xml") for each x in xmlDoc.documentElement.childNodes document.write(x.nodename) document.write(": ") document.write(x.text) next |
ايجاد محتويات مبتني بر Html براي يک سند XML
يکي از مهمترين قابليت هاي XML ، تمايز و تفکيک سندهاي Html از داده هاي مربوطه است . با استفاده از يک پارسر XML ، موجود در مرورگرها ، يک صفحه وب قادر به ايجاد محتوياتي پويا است . در اين زمينه مي توان از پتانسيل هاي جاوااسکريپت بمنظور توليد و ارائه محتويات پويا نيز استفاده کرد . در همين راستا ، امکان استفاده از ASP برا ي ايجاد محتويات پويا با تاکيد بر نقش سرويس دهنده وب نيز وجود دارد . برنامه زير ، داده هاي موجود در يک سند XML را خوانده و آنها را با فرمت Html در خروجي نمايش خواهد داد .
نمايش داده هاي موجود در يک سند XML با استفاده از جاوااسکريپت |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("note.xml") nodes = xmlDoc.documentElement.childNodes to.innerText = nodes.item(0).text from.innerText = nodes.item(1).text header.innerText = nodes.item(2).text body.innerText = nodes.item(3).text |
دستيابي به المان ها از طريق نام
رنامه زير داده هاي موجود در يک سند XML را خوانده و آنها را با فرمت Html در خروجي نمايش خواهد داد .
دستيابي به المان ها د ر يک سند XML از طريق نام و بکمک جاوااسکريپت |
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("note.xml") document.write(xmlDoc.getElementsByTagName("from").item(0).text) |