XML برای برنامه نويسان VB و ASP

XML از کلمات Extensible Markup Language اقتباس شده است . XML را نمی توان بعنوان يک زبان برنامه نويسی در نطر گرفت . XML ، سيستمی برای تعريف ساير زبان ها ( زبان هائی در رابطه با داده ها ) است . کنسرسيوم وب ، XML را بدين صورت تعريف کرده است : " يک گرامر مناسب برای بيان ساختار داده ها " .Html و XML هر دو از SGML)Standard Generalized Markup Language) اقتباس شده اند .
جمعه، 30 اسفند 1387
تخمین زمان مطالعه:
موارد بیشتر برای شما
XML برای برنامه نويسان VB و ASP
XML برای برنامه نويسان VB و ASP
XML برای برنامه نويسان VB و ASP






XML از کلمات Extensible Markup Language اقتباس شده است . XML را نمی توان بعنوان يک زبان برنامه نويسی در نطر گرفت . XML ، سيستمی برای تعريف ساير زبان ها ( زبان هائی در رابطه با داده ها ) است . کنسرسيوم وب ، XML را بدين صورت تعريف کرده است : " يک گرامر مناسب برای بيان ساختار داده ها " .Html و XML هر دو از SGML)Standard Generalized Markup Language) اقتباس شده اند . SGML زبانی بمنظور تعريف يک زبان نشانه گذاری مبتنی بر سند است . Html ، دارای مجموعه ای ثابت از تگ ها است . XML ، مشابه SGML امکان تعريف تگ را فراهم می نمايد.

XML چيست ؟

• يک استاندارد ارائه شده توسط کنسرسيوم وب است .
• يک زبان نشانه گذاری مبتنی بر تگ است .
• يک زبان متا ديتا است . زبانی که امکان تعريف ساير زبان ها را فراهم می نمايد.
• روشی برای ارائه داده است .
• نسبت به حروف بزرگ و کوچک دارای حساسيت است .
• خود را بگونه ای مناسب تشريح می نمايد .
• خوانائی بالائی دارد .
• يک روش قدرتمند برای اشتراک و ارسال اطلاعات بين برنامه ها ، سيستم ها و پردازه ها است .

XML شامل موارد زير نيست :

• جايگزين Html نخواهد بود .
• درگير نمايش اطلاعات نخواهد شد .
• مالکيت آن در انحصار يک شرکت و يا توليد کننده خاص نمی باشد .
• مورد حمايت تمام مرورگر های وب نمی باشد .
• يک بانک اطلاعاتی نيست .
XML ، امکان تفکيک داده از نمايش را فراهم می نمايد( XML نحوه تشريح داده ها ، Html نحوه نمايش داده ها ) . با استفاده از XML ، می توان سندهای حاوی اطلاعاتی را ايجاد که بسادگی از يک محل به محل ديگر ارسال گردند. XML استانداردی برای مبادله داده های ساختيافته بين عناصر نرم افزاری ، برنامه و سيستم ها است .

آشنائی عملياتی با XML

بمنظور آشنائی با سندهای XML ، مثال زير را در نظر بگيريد :

مثال :  يک سندXML

<?xml version="1.0"?>
<mycomputer>
  <pc>
       <type>Laptop</type>
       <brand>Toshiba</brand>
       <model>Tecra 8000</model>
       <processor>300 Mhz Pentium II</processor>
       <ram>128 MB</ram>
       <drives>
           <drive>9 MB Hard Disk</drive>
           <drive>1.4 MB Floppy Disk</drive>
           <drive>CD-ROM</drive>
       </drives>
       <display>14 inch active matrix LCD panel</display>
        <modem>Toshiba internal V.90</modem>
          <network>Xircom Cardbus Ethernet II 10/100</network>
   </pc>
   <docking_station/>
   <case>
          <brand>USL</brand>
          <color>black</color>
         <fabric>vinyl</fabric>
    </case>
</mycomputer>

در رابطه با مثال فوق ، ذکر موارد زير ضروری است :
• محتويات سند فوق بصورت متنی است .
• بر خلاف Html ، تگ ها جملگی بدرستی استفاده شده و بنوعی داده مورد نظر خود را تشريح می نمايند .
• همانگونه که مشاهده می شود ، XML امکان داده های سلسله مراتبی تودر تو را حمايت می نمايد .
• سند فوق با توجه به تعريف مناسب تگ ها ، بخوبی خود را تشريح می نمايند .
جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .

توضيحات

ويژگی

<?xml version="1.0"?>

تعريف XML. هر سند XML، می بايست با تعريف XMLآغاز گردد. تعريف فوق می بايست بصورت حروف کوچک انجام گردد . تعريف XMLبخشی از قسمت Prologيک سند XMLاست . در مثال ارائه شده ، تنها بخش موجود در prologهمين تعريف است . در بخش Prologمی توان DTDو يا XSLرا نيز مشخص نمود.

<?xml version="1.0"?>
<mycomputer>
...
</mycomputer>
 

المان های XML. سندهای XMLاز المان های متفاوتی تشکيل می گردند. يک المان دارای يک تگ آغاز ، محتويات و يک تگ پايان است .  <ram>128 MB</ram>  . تمام سندهای XMLدارای يک المان ريشه می باشند . در مثال ارائه شده mycomputer  بمنزله المان ريشه است .

<ram>128 MB</ram>

اسامی المان ها . نام درنظر گرفته برای المان ها ، می بايست با يک حرف ، _ ،  و يا يک کالون شروع شود. هر کاراکتر بعد از حرف اول ، می تواند يک حرف ، يک عدد ،  يک _ يک کالون ، يک Hyphenو يا يک نقطه باشد . اسامی المان ها نمی تواند شامل فضای خالی باشد .

Character

Entity Reference

&lt;

&gt;

&

&amp;

محتويات المان ها . متن موجود بين تگ های آغاز و پايان بعنوان محتويات يک المان در نظر گرفته شده و می تواند شامل : >  ، <  و & باشد. با توجه به استفاده  خاص از کاراکترهای فوق در سندهای XML، در صورت ضرورت به استفاده از حروف فوق در متن محتويات يک المان ، می توان از کد معادل آنها استفاده کرد . مثلا" در صورت تعريف المان <formula> ، می توان محتويات آن را  بصورت زير مشخص می گردد .
 <formula>x &lt; y + 5</formula>

المان های تودرتو صحيح :
 <case>
    <brand>USL</brand>
    <color>black</color>
    <fabric>vinyl</fabric>
</case>
 

المان های تودرتو . تمام المان های تودرتو بطور کامل همراه المان های مادر خود قرار گرفته و می بايست شامل تگ های آغاز و پايان در بلاک داخلی مربوطه باشند .  در صورتيکه المان های فرزند دارای تگ های پايان در ساختار داخلی مربوطه نباشند ، سند XML  درست نخواهد بود . در مثال زير المان <brand> فرزند المان <case> است . بنابراين می بايست تگ پايان آن نيز درون المان <case>  قرار گيرد .
<case>
 <brand>    
<color>black</color>    
<fabric>vinyl</fabric>    
     </case>
</brand>

روش اول :
<element/>
روش دوم :
<element></element>

المان تهی .  يک المان تهی  را می توان به دو صورت مشخص نمود . در مثال ارائه شده يک المان تهی تعريف شده است :
<docking_station/>
 

فايل XML زير ، شامل داده های مشابه با مثال قبلی بوده با اين تفاوت که برخی از اطلاعات با استفاده از خصلت ها ارائه شده اند .

مثال :  يک سندXML با تاکيد بر استفاده از خصلت ها برای ارائه اطلاعات اضافه

<?xml version="1.0"?>
<mycomputer>
   <pc type="Laptop" brand="Toshiba" model="Tecra 8000">
    <processor>300 Mhz Pentium II</processor>
    <ram>128 MB</ram>
    <drives>
       <drive>9 MB Hard Disk</drive>
       <drive>1.4 MB Floppy Disk</drive>
       <drive>CD-ROM</drive>
     </drives>
   <display>14 inch active matrix LCD panel</display>
   <modem>Toshiba internal V.90</modem>
   <network>Xircom Cardbus Ethernet II 10/100</network>
 </pc>
<docking_station/>
<case brand="USL">
   <color>black</color>
    <fabric>vinyl</fabric>
</case>
</mycomputer>

جدول زير برخی از مفاهيم و تعاريف اوليه در رابطه با مثال فوق ، را نشان می دهد .

توضيحات

ويژگی

<element  
attribute_1="value_1" attribute_2="value_2" ...
attribute_n="value_n">
 

خصلت ها . المان PC،  دارای سه خصلت است .
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
خصلت ها در XMLشامل نام و مقدار می باشند . برخلاف Html، مقدار خصلت های استفاده شده در XML  ، می بايست بين علامت " " ، قرار گيرد .

<!-- توضيحات دلخواه-->
 

توضيحات . برای ارا ئه توضيحات در فايل های XML از فرم عمومی روبرو استفاده می شود .

<?xml version="1.0"?>
<mycomputer>
<pc xmlns:org="url:test.com:schema-org"
   xmlns:pc="url:test.com:schema-pc"  >
<org:type>Accounting</org:type>
<pc:type>Laptop</pc:type>
 

Namespace. فرض کنيد يک سند XMLرا ايجاد و قصد ترکيب آن با يک سند XMLديگر را داريم . يکی از مسائلی که ممکن است در زمان ترکيب دو سند مطرح گردد ، استفاده از اسامی مشابه برای المان هائی است که دارای مفهومی کاملا" متفاوت می باشند . ( مثلا" در يک سند از المان <name> بمنظور مشخص نمودن نام يک شهر استفاده شده و در سند ديگر از المان <name> برای مشخص نمودن نام کتاب استفاده شده است ) . بمنظور حل مشکل فوق از namespaceاستفاده می گردد . namespace، مجموعه ای از المان ها بهمراه خصلت های مربوطه بوده که به يک آدرس URLمرتبط تا منحصر بفرد بودن اسامی المان ها را تضمين نمايد . برای تعريف يک namespaceاز خصلت xmlnsبهمراه تگ شروع يک المان استفاده می گردد . پس از تعريف namespace، زمينه استفاده از آن برای هر يک از المان های موجود در سند xmlفراهم می گردد .در مثال روبرو ، دو namespaceبا نام pc  و orgتعريف و در ادامه ساير المان ها ی موجود در سند از آنان استفاده نموده اند .

<? name data?>

دستورالعمل های پردازش . از دستورالعمل های پردازش بمنظور ارسال اطلاعات خاص برای برنامه ای که قصد پردازش سند XMLرا دارد ، استفاده  می گردد . تعريف XMLکه در ابتدای فايل های XMLقرار می گيرد ، نمونه ای از اينگونه دستورات است .  برخی از دستورات پردازش که با xmlشروع می گردند، رزو شده می باشند .

Document Type Definition ) DTD)

قبل از بررسی تکنولوژی DTD و Schema ذکر موارد زير مفيد خواهد بود :
• مولفين سندهای XML می توانند ساختار دلخواه و مورد نظر خود را برای تشريح داده های مربوطه ايجاد نمايند .
• يک مولف سندهای XML ، نمی تواند اين اطمينان را داشته باشد که ساختار ايجاد شده برای سند ها ، توسط ساير مولفين سندهای XML تغيير نمی نمايد .
• ما بدنبال روشی هستيم که اين اطمينان را ايجاد نمايد که تغيير تصادفی ساختار يک سند XML تحقق پيدا نخواهد کرد .
• DTD ، روشی برای تشريح و مسنتد سازی ساختار استفاده شده در يک سند XML است . برای اعبتار سنجی يک سند XML وجود DTD ضرورت دارد ( ممکن است از تکنولوژی مشابه استفاده گردد )
• مولفين سندهای XML ، با استفاده از مجموعه ای قوانين که نوشته خواهند شد ، يک سند XML را معتبر می نمايند .
• يک سند XML ، زمانی " خوش شکل" ناميده می شود که گرامر مربوط به XML در آن رعايت شده باشد. صرف "خوش شکل " بودن يک سند XML ، بمنزله معتبر بودن آن نيست .
• با استفاده از DTD ، المان های مورد نياز يک سند XML تعريف ، المان های اختيار ی ، تعداد دفعات تکرار يک المان و ترتيب المان ها از لحاظ استقرار در يک سند XML مشخص می گردد.
• DTD ممکن است نوع داده های موجود در سند XML را نيز مشخص نمايد .( مشخص نمودن نوع در رابطه با المان و خصلت ها صدق خواهد کرد ) .
• DTD بعنوان بخشی از استاندارد XML بوده که توسط کنسرسيوم وب ارائه شده است .
• در زمان اعتبار سنجی يک سند XML از طريق يک DTD و بکمک بخش اعتبار سنجی پارسر ، سند XML بمنظور تشخيص حضور تمام المان ها و عدم تعريف يک المان بررسی خواهد شد . ساختار سلسله مراتبی المان ها ی تعريف شده در DTD نيز بررسی خواهد شد . مقدار تمامی خصلت ها نيز بمنظور اطمطنان از صحت موارد اعلام شده با مشاهده شده ، نيز کنترل می گردد .
• هر نوع اطلاعات لازم در خصوص يک سند XML ( از بالا تا پايين يک سند ) توسط DTD تعريف و معتبر خواهد شد .
• يک DTD می تواند بصورت داخلی و يا خارجی استفاده گردد . در مدل داخلی ، اطلاعات مربوط به DTD بهمراه سند XML قرار گرفته و يک فايل را تشکيل خواهند داد ( سند XML و DTD مربوطه ) . در مدل خارجی ، اطلاعات مربوط به DTD در يک فايل مجزا و با انشعاب dtd ذخيره و در سند XML مربوطه به آن مراجعه خواهد شد .
• در صورت تعريف يک DTD بصورت خارجی ، امکان مراجعه به آن توسط سندهای XML متعددی وجود خواهد داشت . با توجه به گفته فوق ، استفاده از روش فوق دارای مزايای عمده نسبت به حالتی است که DTD را بصورت داخلی و همراه با سند XML استفاده نمائيم .
• برای برنامه هائی که اطلاعات خود را بصورت XML مبادله می نمايند ، DTD مهم خواهد بود .
• يک نمونه DTD داخلی

مثال :  يک نمونه  DTDداخلی

<?xml version="1.0"?>
    <!DOCTYPE message [
    <!ELEMENT message (#PCDATA)>
    ]>
<message>
     Internal  DTD
</message>

• يک نمونه DTD خارجی

مثال :  يک نمونه  DTDخارجی

<?xml version="1.0"?>
<!DOCTYPE message SYSTEM "message.dtd">
<message>
   External  DTD
</message>

سندهای XML ، می توانند شامل يک DTD اختياری باشند . سندهای XML از گزينه فوق بمنظور تضمين فرمت مشخص شده استفاده می نمايند. مثال زير يک سند XML بهمراه DTD آن را نشان می دهد . سند XML در بخش اول مقاله ارائه شده است . در مثال فوق DTD بصورت داخلی و همراه سند استفاده شده است .

مثال :  يک سندXMLبهمراه DTDمربوطه

<?xml version="1.0"?>
<!DOCTYPE mycomputer [
<!ELEMENT mycomputer (pc, docking_station, case)>
<!ELEMENT pc (processor, ram, drives, display,modem, network)>
<!ATTLIST pc
type (Laptop|Desktop) "Desktop"
brand CDATA #IMPLIED
model CDATA #IMPLIED>
<!ELEMENT processor (#PCDATA)>
<!ELEMENT ram (#PCDATA)>
<!ELEMENT drives (drive*)>
<!ELEMENT drive (#PCDATA)>
<!ELEMENT display (#PCDATA)>
<!ELEMENT modem (#PCDATA)>
<!ELEMENT network (#PCDATA)>
<!ELEMENT docking_station (#PCDATA)>
<!ELEMENT case (color, fabric)>
<!ATTLIST case
brand CDATA #IMPLIED>
<!ELEMENT color (#PCDATA)>
<!ELEMENT fabric (#PCDATA)>
]>

<mycomputer>
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
<processor>300 Mhz Pentium II</processor>
<ram>128 MB</ram>
<drives>
<drive>9 MB Hard Disk</drive>
<drive>1.4 MB Floppy Disk</drive>
<drive>CD-ROM</drive>
</drives>
<display>14 inch active matrix LCD panel</display>
<modem>Toshiba internal V.90</modem>
<network>Xircom Cardbus Ethernet II 10/100</network>
</pc>
<docking_station/>
<case brand="USL">
<color>black</color>
<fabric>vinyl</fabric>
</case>
</mycomputer>

يکی ديگر از روش های استفاده از DTD در يک سند XML ، بصورت خارجی است . در اين حالت اطلاعات مربوط به DTD در يک فايل مجزا و با انشعاب dtd ذخيره و در ادامه در سند XML به آن مراجعه می گردد .

مثال :  بخش آغازين يک سندXML  و نحوه  استفاده از DTDبصورت خارجی

<?xml version="1.0"?>
<!DOCTYPE mycomputer SYSTEM "mycomputer.dtd">
<mycomputer>
        ....  
</mycomputer>

سندهای XML خوش شکل و معتبر

يک سند "خوش شکل" XML ، سندی است که دارای گرامر صحيح و تعريف شده در رابطه با XML باشد . گرامر مربوطه در قالب مجموعه ای از قوانين مشخض شده است . برخی از اين قوانين عبارتند از :
• سند می بايست دارای يک و يا چند المان باشد .
• سند می بايست دارای يک المان ريشه بوده که ساير عناصر با يک ساختار مناسب ( تودر تو ) به آن متصل می گردند .
• تمام المان های موجود در سند می بايست دارای تگ شروع و پايان باشند .
يک سند "خوش شکل" XML که شامل يک DTD ( داخلی و يا خارجی ) می باشد ، بعنوان يک سند معتبر در نظر گرفته خواهد شد . پارسر XML ( پردازنده نيز ناميده می شود ) با استفاده از يک DTD قادر به معتبر نمودن يک سند XML خواهد بود . بررسی جزئيات مربوط به تکنولوژی DTD از حوصله اين مقاله خارج است .

XML-Data and Schema

DTD دارای محدوديت و مسائل خاص خود می باشد :
• برای نوشتن DTD لازم است که با يک زبان جديد آشنا شويم .
• DTD انتظارات لازم در خصوص نوع داده ها را بخوبی تامين نمی نمايد .
• DTD قابليت بسط و توسعه را ندارد .
XML-Data ، با هدف حل مشکلات فوق ايجاد شده است . XML-Data يک زبان مبتنی بر XML بوده که از آن بمنظور تشريح پيش نويس (Schema) يک سند استفاده می گردد . زبان فوق ، بسط پذير، انعطاف پذير و قدرتمند است . فايل های Schema با انشعاب xsd ذخيره می گردند . فايل های Schema خود بمنزله سندهای XML بوده و المان ريشه آنان Schema نام دارد . در ابتدای فايل های Schema ، می بايست namespace مربوطه تعريف گردد . جدول زير XML-Data Schema ، معادل DTD ارائه شده در مثال قبل را نشان می دهد :

مثال :  XML-Data Schema   مربوط به سند XML

<schema xmlns = "http://www.w3.org/2001/XMLSchema">
<ElementType name="mycomputer" content="eltOnly" order="seq">
      <element type="pc"/>
      <element type="docking_station"/>
      <element type="case"/>
</ElementType>
<ElementType name="pc" content="eltOnly" order="seq">
     <element type="processor"/>
     <element type="ram"/>
     <element type="drives"/>
     <element type="display"/>
     <element type="modem"/>
     <element type="network"/>
</ElementType>
<ElementType name="pc">
     <AttributeType name="type"
      xmlns:dt="urn:schemas-microsoft-com:datatypes"
      dt:type="enumeration" dt:values="Laptop Desktop"
      default="Desktop"/>
     <AttributeType name="brand" required="no"/>
     <AttributeType name="model" required="no"/>
     <attribute type="type"/>
     <attribute type="brand"/>
     <attribute type="model"/>
</ElementType>
    <ElementType name="processor" content="textOnly"/>
    <ElementType name="ram" content="textOnly"/>
    <ElementType name="drives" content="eltOnly">
       <element type="drive" minOccurs="0" maxOccurs="*"/>
</ElementType>
    <ElementType name="drive" content="textOnly"/>
    <ElementType name="display" content="textOnly"/>
    <ElementType name="modem" content="textOnly"/>
    <ElementType name="network" content="textOnly"/>
    <ElementType name="docking_station" content="textOnly"/>
    <ElementType name="case" content="eltOnly" order="seq">
        <element type="color"/>
        <element type="fabric"/>
</ElementType>
<ElementType name="case">
    <AttributeType name="brand" required="no"/>
    <attribute type="brand"/>
</ElementType>
<ElementType name="color" content="textOnly"/>
<ElementType name="fabric" content="textOnly"/>
</Schema>

بررسی جزئيات تکنولوژی Schema از حوصله اين مقاله خارج است .

آيا معتبر سازی يک سند ، ضرورت دارد ؟

در صورتيکه سندهای XML دارای يک حيات طولانی بوده و يا از آنها بمنظور مبادله اطلاعات بين سيستم ها و برنامه های متفاوت استفاده می گردد ، لازم است که معتبر سازی يک سند XML بکمک DTD و يا Schema انجام گيرد . در صورتيکه از سند های XML برای ارسال اطلاعات بين لايه های متفاوت يک برنامه سه لايه استفاده می گردد ، ضرورتی به معتبر ساری يک سند XML نخواهد بود . اگر قصد ايجاد تعداد زيادی از سندهای معتبر را داشته باشيد ، می توان يک ابزار مناسب بمنظور ايجاد DTD و يا Schema را تهيه نمود .
*ساختار سلسله مراتبی اشياء در XML DOM
ساختار اشياء در XML DOM ، بصورت سلسله مراتبی و تصويری مناسب از اشياء موجود در سند XML است . شکل زير يک نمونه از ساختار سلسله مراتبی اشياء در XML DOM را نشان می دهد ..

 

اشياء XML DOM

XML DOM دارای چهار شی است :
• شی Document . شامل سند XML است . ( منظور گره ای با نام Document نيست )
• شی node . شامل يک گره در سند XML است .
• شی nodeList . شامل ليستی از گره های همزاد ( برادر و يا خواهر ) است . برخی از متدهای DOM يک شی nodeList را بعنوان خروجی برمی گردانند.
• شی ParseError . از شی فوق بمنظور بازيابی آخرين مورد خطاء در رابطه با پارسينگ استفاده می شود .
اشياء فوق دارای مجموعه ای از متدها و خصلت ها بوده و با استفاده از يک زبان اسکريپت ، می توان عمليات مورد نظر در رابطه با يک سند XML را بکمک آنها انجام داد .
مثال : فرض کنيد سند XML ارائه شده در بخش های قبل را داشته باشيم ( mycomputer.xml)

مثال :  يک سندXML  نمونه (mycomputer.xml)

<?xml version="1.0"?>
<mycomputer>
  <pc>
     <type>Laptop</type>
     <brand>Toshiba</brand>
     <model>Tecra 8000</model>
     <processor>300 Mhz Pentium II</processor>
     <ram>128 MB</ram>
     <drives>
        <drive>9 MB Hard Disk</drive>
        <drive>1.4 MB Floppy Disk</drive>
        <drive>CD-ROM</drive>
     </drives>
     <display>14 inch active matrix LCD panel</display>
     <modem>Toshiba internal V.90</modem>
     <network>Xircom Cardbus Ethernet II 10/100</network>
   </pc>
   <docking_station/>
    <case>
      <brand>USL</brand>
      <color>black</color>
      <fabric>vinyl</fabric>
   </case>
</mycomputer>

برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان VBSrcipt نوشته شده اند . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .

مثال :  بازيابی اولين گره موجود در سند mycomputer.xml  ( نسخه VBScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=vbscript>
<!--
Function getXML()
Dim xmlDoc
Dim xmlRoot
Dim xmlNode
Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")
Set xmlRoot = xmlDoc.documentElement
Set xmlNode = xmlRoot.childNodes(0)
divHere.innerHTML = _
"<H3>" & xmlNode.nodeName & "</H3>"
End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1>بازيابی اولين گره</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد :
بازيابی اولين گره
pc

برنامه زير، نام اولين گره موجود در سند XML را برمی گرداند . در برنامه فوق تمام اسکريپت ها بر روی مرورگر سرويس گيرنده اجراء و به زبان JavaScript نوشته شده اند .( نسخه فوق با نسخه نوشته شده توسط VBScript دارای اختلاف اندکی می باشند ) . اطلاعات فوق را در فايلی با نام دلخواه ذخيره و در ادامه آن را توسط مرورگر فعال و مشاهده نمائيد .

مثال :  بازيابی اولين گره موجود در سند mycomputer.xml  ( نسخه JavaScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=javascript>
<!--
function getXML() {
var xmlDoc
var xmlRoot
var xmlNode
xmlDoc = new ActiveXObject("Microsoft.xmldom")
xmlDoc.async = false
xmlDoc.load("mycomputer.xml")
xmlRoot = xmlDoc.documentElement
xmlNode = xmlRoot.childNodes(0)
divHere.innerHTML =
"<H3>" + xmlNode.nodeName + "</H3>"
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1>بازيابی اولين گره</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

در صورت مشاهده صفحه فوق در مرورگر ، خروجی زير مشاهده خواهد شد :
بازيابی اولين گره
pc

در ادامه بخش های متفاوت دو مثال فوق تشريح خواهند گرديد .

استقرار يک سند XML در حافظه

قبل از انجام هر گونه عمليات در رابطه با يک سند XML ، می بايست سند فوق در حافظه مستقر گردد . قبل از استقرار سند XML در حافظه ، می بايست نمونه ای از شی XML DOM را ايجاد نمود. کدهای زير که در مثال اول ( نسخه نوشته شده به زبان VBScript) ارائه شده اند ، نحوه ايجاد يک نمونه شی XML -DOM را با استفاده از متد CreateObject و استقرار يک سند XML را نشان می دهد .

 

مثال :  کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه

Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")

در مثال فوق ،از متد async مربوط به شی document بمنظور استقرار سند XML در حافظه بصورت همزمان استفاده شده است . بدين ترتيب مرورگر قبل از انجام هر گونه پردازش بر روی سند XML ، در انتظار استقرار تمام سند در حافظه باقی خواهد ماند . در صورتيکه از کد فوق استفاده نگردد ، مرورگر بمحض دريافت بخشی از سند ، عمليات پردازش را آغاز خواهد کرد . در برنامه فوق از متد Load بمنظور استقرار يک فايل XML در حافظه استفاده شده است . در صورتيکه قصد استقرار يک سند XML را از طريق يک رشته داشته باشيم ، می توان از متد LoadXML استفاده کرد .
در نسخه جاوا اسکريپت مثال فوق ،با استفاده از شی AxtiveXObject يک نمونه از شی XML DOM ايجاد شده است . کدهای فوق بصورت زير می باشند :

مثال :  کدهای لازم بمنظور ايجاد يک نمونه شی XML DOMو استقرار سند XMLدر حافظه

xmlDoc = new ActiveXObject("Microsoft.xmldom")
xmlDoc.async = false
xmlDoc.load("mycomputer.xml")

المان سند

کد زير بمنظور بازيابی يک مرجع به المان سند ( گره مادر در سند 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()">
<H1>Mycomputer XML Example</H1>
<DIV ID="divHere">
</DIV>
</BODY>
</HTML>
پس از ارائه توضيحات لازم در خصوص مثال های ارائه شده ، در ادامه نحوه انجام ساير عمليات بر روی يک سند XML بکمک XML DOM تشريح می گردد .

تکرار در بين گره های يک سند

سند XML ارائه شده در مثال قبل (mycomputer.xml) دارای ساختار درختی زير است :
با استفاده از مجموعه childNodes ، می توان عمليات تکرار در بازيابی تمام درخت XML مربوط به يک سند XML را انجام داد . برنامه زير تمام اطلاعات موجود در درخت XML را بازيابی و آنها را با يک فرمت قابل قبول ( مجموعه ای از جداول ) در خروجی نمايش خواهد داد . در اين برنامه اطلاعات مربوط به اولين سطح گره های موجود ( pc,case,docking_station) با استفاده از يک حلقه تکرار استخراج و برای بازيابی اطلاعات موجود در دومين سطح گره ها ( type, brand, model ) از يک حلقه تکرار ديگر استفاده شده است .

مثال :  بازيابی تمام گره های موجود در يک سند XMLو نمايش آنها با يک فرمت مناسب

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<STYLE>
H3 {color: blue}
</STYLE>
<SCRIPT LANGUAGE=vbscript>
<!--
Option Explicit
Function getXML()
Dim xmlDoc
Dim xmlRoot
Dim xmlPNode
Dim xmlNode
Dim strDoc
Set xmlDoc = CreateObject("Microsoft.xmldom")
xmlDoc.async = False
xmlDoc.load("mycomputer.xml")
Set xmlRoot = xmlDoc.documentElement
For Each xmlPNode In xmlRoot.childNodes
  strDoc = strDoc & "<H3>" & xmlPNode.nodeName & "</H3>"
  If xmlPNode.childNodes.length = 0 Then
     strDoc = strDoc & "<I>No data</I>"
  Else
    strDoc = strDoc & "<TABLE border>"
    For Each xmlNode In xmlPNode.childNodes
    strDoc = strDoc & "<TR>" & _
    "<TD><B>" & xmlNode.nodeName & ":</B></TD>" & _
    "<TD>" & xmlNode.text + "</TD>" & "</TR>"
   Next
 End If
  strDoc = strDoc & "</TABLE>"
Next
divHere.innerHTML = strDoc
End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML()">
<H1 align="center" dir="rtl">بازيابی تمام المانهای يک سندXML</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به شکل زير خواهد بود :
بازيابی تمام المان های يک سند XML
pc


type:

Laptop

brand:

Toshiba

model:

Tecra 8000

processor:

300 Mhz Pentium II

ram:

128 MB

drives:

9 MB Hard Disk 1.4 MB Floppy Disk CD-ROM

display:

14 inch active matrix LCD panel

modem:

Toshiba internal V.90

network:

Xircom Cardbus Ethernet II 10/100

docking_station
No data
case


brand:

USL

color:

black

fabric:

vinyl

نسخه جاوا اسکريپت برنامه فوق به شکل زير است : ( فقط حلقه های تکرار مشخص شده اند )

مثال :  بازيابی تمام گره های موجود در يک سند XML (نسخه جاوااسکريپت )

xmlRoot = xmlDoc.documentElement
strDoc = "<TABLE>"
for (intI=0; intI <= xmlRoot.childNodes.length-1;intI++) {
      xmlPNode = xmlRoot.childNodes(intI)
      strDoc = strDoc +"<H3>" + xmlPNode.nodeName + "</H3>"
      if (xmlPNode.childNodes.length == 0)
         strDoc = strDoc + "<I>No data</I>"
     else {
               strDoc = strDoc + "<TABLE border>"
               for (intJ=0;intJ <= xmlPNode.childNodes.length-1;intJ++) {
                 xmlNode = xmlPNode.childNodes(intJ)
                 strDoc = strDoc + "<TR>" +
                 "<TD><B>" + xmlNode.nodeName + ":</B></TD>" +
                 "<TD>" + xmlNode.text + "</TD>" +
                "</TR>"
              }
       strDoc = strDoc + "</TABLE>"
     }
}

بازيابی يک گره خاص و يا مجموعه ای از گره ها

در برخی حالات علاقه مند به بازيابی گره ها از طريق حلقه تکرار نمی باشيم ، در چنين مواردی می توان مستقيما" اقدام به بازيابی مجموعه ای از گره ها در يک سند 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()
  Dim xmlDoc
  Dim xmlNodes
  Set xmlDoc = CreateObject("Microsoft.xmldom")
  xmlDoc.async = False
  xmlDoc.load("mycomputer.xml")
  Set xmlNodes = xmlDoc.getElementsByTagName("pc/ram")
  divHere.innerHTML = xmlNodes.item(0).text
End Function

مثال: بازيابی يک المان خاص با استفاده از متد getElementsByTagName( نسخه javascript)

function getXML() {
   var xmlDoc
   var xmlNodes
   xmlDoc = new ActiveXObject("Microsoft.xmldom")
   xmlDoc.async = false
   xmlDoc.load("mycomputer.xml")
   xmlNodes = xmlDoc.getElementsByTagName("pc/ram")
   divHere.innerHTML = xmlNodes.item(0).text
}

*بازيابی خصلت ها
تمام اطلاعات در سند های XML از طريق محتويات المان ها ذخيره نشده و در برخی حالات از خصلت مربوط به يک المان استفاده و اطلاعات بکمک آن ذخيره می گردد . بمنظور بازيابی اطلاعات ذخيره شده در خصلت مربوط به يک المان می توان از مجموعه attributes استفاده کرد . برای ارائه توضيحات کاربردی بيشتر ، فايل mycomputer.xml ( در مثال های قبل از آن استفاده شده بود ) را با اندک تغييراتی که عمدتا" به استفاده از خصلت بهمراه المان ها بر می گردد ، تغيير نام و يک فايل ديگر با نام mycomputer1.xml را ايجاد که تگ های pc و case آن بصورت زير باشند :
<pc type="Laptop" brand="Toshiba" model="Tecra 8000">
...
<case brand="USL">
برنامه زيرخصلت های مربوط به المان PC را در خروجی نمايش می دهد .

مثال :  نمايش خصلت های يک المان ( نسخه VBScript)

<HTML>
<HEAD>
<TITLE>XML Example </TITLE>
<SCRIPT LANGUAGE=vbscript>
<!--
  Function getXML( )
    Dim xmlDoc
    Dim xmlAtt
    Dim xmlPNode
    Dim strDoc
    Dim xmlNodes
    Dim xmlPCNode
    Set xmlDoc = CreateObject("Microsoft.xmldom")
    xmlDoc.async = False
    xmlDoc.load("mycomputer.xml")
    Set xmlNodes = xmlDoc.getElementsByTagName("pc")
     Set xmlPCNode = xmlNodes.item(0)
     For Each xmlAtt in xmlPCNode.attributes
        strDoc = strDoc & "<BR><B>" & xmlAtt.nodeName & ":</B>" & _
        xmlAtt.text
     Next
     divHere.innerHTML = strDoc
  End Function
-->
</SCRIPT>
</HEAD>
<BODY onload="getXML( )">
<H1 align="center" dir="rtl">بازيابی خصلت های يکالمان</H1>
<DIV ID="divHere"></DIV>
</BODY>
</HTML>

خروجی برنامه فوق پس از مشاهده صفحه مربوطه در مرورگر به صورت زير است :
بازيابی خصلت های يک المان

type:Laptop
brand:Toshiba
model:Tecra 8000


مثال :  نمايش خصلت های يک المان ( نسخه JavaScript) - فقط حلقه تکرار آورده شده است .

 for (intI=0;intI <= xmlPCNode.attributes.length-1;intI++) {
   xmlAtt = xmlPCNode.attributes(intI)
   strDoc = strDoc +  "<BR><B>" + xmlAtt.nodeName + ": </B>" +
   xmlAtt.text
}

بمنظور بازيابی محتويات يک خصلت خاص، می توان از متد getAttribute مربوط به شی node استفاده کرد . مثلا" کد زير خصلت brand مربوط به المان case را بازيابی می نمايد :
Set xmlNodes = xmlDoc.getElementsByTagName("case")
Set xmlPCNode = xmlNodes.item(0)
divHere.innerHTML = xmlPCNode.getAttribute("brand")
تاکنون به بررسی برخی از امکانات XML DOM بصورت بسيار محدود اشاره شد. XML DOM دارای مجموعه ای از خصلت ها و متد ها ی متنوع ديگر است . شرکت ماکروسافت نيز مجموعه ای ديگر از خصلت ها و متدها را در اين زمينه تعريف نموده است . بهرحال برای انجام يک عمليات بخصوص می توان از روش های متعددی استفاده و در اين زمينه يک راه حل شفاف و منحصر بفرد وجود ندارد .

استفاده از XML بر روی سرويس دهنده

تمام مثال های ارائه شده در بخش های قبل ، فايل های XML را بر روی سرويس گيرنده پردازش می کردند. بمنظور پردازش فايل های XML بر روی سرويس دهنده ، می توان از عنصر XMLDOM از طريق صفحات ASP استفاده کرد . برنامه زير اطلاعات موجود در فايل mycomputer.xml ( در بخش های قبل از آن استفاده شده است ) را پردازش و با يک فرمت مناسب ( استفاده از سه جدول مجزا برای نمايش هر يک از المان های سطح اول ) در خروجی نمايش می دهد . ( نظير اين عمليات در بخش های قبل نيز ارائه گرديد در اين مثال عمليات مورد نظر بر روی سرويس دهنده انجام خواهد شد ) .

 

مثال :  پردازش يک فايل XMLبرروی سرويس دهنده و ارائه خروجی مناسب

<%@ Language=VBScript %>
<%Option Explicit%>
<HTML>
<HEAD>
<TITLE>XML/ASP Example </TITLE>
<STYLE>
H3 {color: blue}
</STYLE>
</HEAD>
<H1>Mycomputer XML Tree Parsed on the Server</H1>
<%
 Dim xmlDoc
 Dim xmlRoot
 Dim xmlPNode
 Dim xmlNode
 Dim strDoc
 Set xmlDoc = Server.CreateObject("Microsoft.xmldom")
 xmlDoc.async = False
 xmlDoc.load(Server.MapPath("mycomputer.xml"))
 Set xmlRoot = xmlDoc.documentElement
 For Each xmlPNode In xmlRoot.childNodes
  strDoc = strDoc & "<H3>" & xmlPNode.nodeName & "</H3>"
  If xmlPNode.childNodes.length = 0 Then
     strDoc = strDoc & "<I>No data</I>"
  Else
    strDoc = strDoc & "<TABLE border>"
    For Each xmlNode In xmlPNode.childNodes
      strDoc = strDoc & "<TR>" & _
      "<TD><B>" & xmlNode.nodeName & ":</B></TD>" & _
      "<TD>" & xmlNode.text + "</TD>" & _
      "</TR>"
   Next
 End If
 strDoc = strDoc & "</TABLE>"
Next
Response.Write strDoc
%>
</BODY>
</HTML>

پس از انجام پردازش های لازم بر روی سرويس دهنده ، خروجی مناسب برای نمايش در مرورگر ارسال خواهد شد . پردازش فايل XML وابسته به امکانات موجود در مرورگر نبوده و صرفا" مرورگرها ، نمايش دهنده اطلاعات ارسالی از سرويس دهنده خواهند بود .



نظرات کاربران
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.
مقالات مرتبط
موارد بیشتر برای شما
اهتزاز پرچم فلسطین در زمین فوتبال جاکاراتا
play_arrow
اهتزاز پرچم فلسطین در زمین فوتبال جاکاراتا
پرتاب گاز اشک آور توسط پلیس هند به سمت دانشجویان معترض
play_arrow
پرتاب گاز اشک آور توسط پلیس هند به سمت دانشجویان معترض
سیمیاری: هیچ ارتشی نمی‌تواند باب‌المندب را باز کند
play_arrow
سیمیاری: هیچ ارتشی نمی‌تواند باب‌المندب را باز کند
نماهنگ/ "روضه دخترانه" با اجرای گروه سرود نجم‌الثاقب
play_arrow
نماهنگ/ "روضه دخترانه" با اجرای گروه سرود نجم‌الثاقب
دستگیری عامل تشویش اذهان عمومی در تهران
play_arrow
دستگیری عامل تشویش اذهان عمومی در تهران
وقوع حادثه امنیتی در نزدیکی یک ساختمان در نیویورک
play_arrow
وقوع حادثه امنیتی در نزدیکی یک ساختمان در نیویورک
آخر و عاقبت اعتماد به آمریکا در تنگه هرمز
play_arrow
آخر و عاقبت اعتماد به آمریکا در تنگه هرمز
حملات پهپادی نیروی دریایی سپاه به دشمن آمریکایی در منطقه
play_arrow
حملات پهپادی نیروی دریایی سپاه به دشمن آمریکایی در منطقه
نوحه مداح عراقی برای حضرت رقیه(س) و به یاد شهدای میناب
play_arrow
نوحه مداح عراقی برای حضرت رقیه(س) و به یاد شهدای میناب
شلیک موشک‌های ایرانی به سمت مواضع دشمن در منطقه
play_arrow
شلیک موشک‌های ایرانی به سمت مواضع دشمن در منطقه
تروریست‌های تجزیه طلب این هشدار را جدی بگیرید!
play_arrow
تروریست‌های تجزیه طلب این هشدار را جدی بگیرید!
کشف بقایای پهپاد انتحاری حامل مواد منفجره در سواحل استانبول
play_arrow
کشف بقایای پهپاد انتحاری حامل مواد منفجره در سواحل استانبول
پاره شدن تسمه تایم علائم، خسارت موتور و کارهایی که باید انجام دهید
پاره شدن تسمه تایم علائم، خسارت موتور و کارهایی که باید انجام دهید
اشتباهات رایج در خرید اورینگ لاستیکی
اشتباهات رایج در خرید اورینگ لاستیکی
ماجرای پرواز هواپیمای ایرانی به یمن چه بود؟
play_arrow
ماجرای پرواز هواپیمای ایرانی به یمن چه بود؟