Professional Documents
Culture Documents
(XML) دورة في PDF
(XML) دورة في PDF
www.facebook.com/yourcommands
1|Page
أهدي هذا الكتاب الصغير إلى كل من ساعدني وشجعني على كتابته وكل من كان سببا في معلوماتي
بعالم الحاسب من أهل وأصدقاء ومدرسين.
كما أهدي الكتاب اهداء خاصة ألمي وابي وملكة قلبي خطيبتي الغالية.
أصدقائي العلم جيد جدا وعلينا كل يوم أن نتعلم المزيد وال نستسلم ألن كل واحد فينا يبرع في مجال
معين وكل انسان يجب أن يبحث عما يرضي داخله من معارف.
الجهل أسوء طريقة ليكون فيها اإلنسان غارقا في مطبات الحياة التعيسة لذا أصدقائي داوموا على
قراءة الكتب والتعلم من مختلف المصادر ،فليس من المعيب أن تسأل من هو أصغر منك سنا ً وأعلى
منك شئنا علميا.
ال تقل غدا سأقرأ الكتاب الفالني وبعده سأتدرب على التقنية أو بالمجال الفالني ،بل كن السابق وابدأ
من اليوم فليس من الحكمة تأجيل عمل اليوم إلى الغد.
لن أطيل عليكم وسأبدأ كتابي مباشرة مع تمنياتي لكم بالتوفيق.
2|Page
دورة في XML -الدرس األول:
مقدمة تعريفية باللغة -ماذا تعني XML؟
هي اختصار لـ eXtensible Markup Languageوقد تم تصميمها لتناقل وتخزين البيانات
،وتعتبر من أكثر اللغات شعبية في عالم البرمجة وكما أنها سهلة التعلم.
وهنا مثال حول ملف من هذه اللغة:
الحظوا أن هذه اللغة تتميز ببنيتها الهرمية فهي عبارة عن عقدة رئيسية noteومجموعة من العقد
الفرعية بداخلها مثل. to,from,heading,body .
إن لغة XMLهي لغة مصممة لتخزين البيانات وليست لعرضها ففي المثال السابق قمنا بتخزين
بيانات مالحظة noteبتحديد المرسل إليه ثم المرسل ثم عنوان المالحظة ونص المالحظة كما هو
بالمثال. مبين
لعرض هذه البيانات نحن بحاجة للغات رديفة لها مثل HTML,JavaScriteكما يمكن استخدام
لغات أخرى مثل السي شارب والفي بي مع . ASP.NET
اما من حيث النص البرمجي فنجد أن هذه اللغة مشابه ل HTMLولكنهما مختلفتان كثيرا من حيث
األهداف :
-ان لغة XMLتم تصميمها لتخزين البيانات وتحديد انواعها أما HTMLفقد تم تصميمها
لعرض البيانات واالهتمام بتنسيقها وشكل العرض.
-وفي المثال السابق الحظنا أن XMLال تفعل شيء محدد سوى التخزين حيث أن عملها
مشابه لعمل قواعد البيانات ،فالمعلومات السابقة هي مجرد تخزين لمالحظة مرسلة من
شخص لشخص مع تفاصيل المالحظة ومع ذلك هذه اللغة ال تفعل شيء محدد سوى توصيف
وتخزين البيانات أي أنها ال تقوم بعرض وغير مسؤولة عن عمليات التنسيق وغيرها.
-من المهم معرفة شيء عن هذه اللغة أنها مصممة لتقوم ببناء واختراع التاغ الذي ترغبه أنت
><ما بين هذه األقواس والمقصود بذلك .
3|Page
مثال التاغ ) (Tagالمسمى ><noteأو حتى ><Toأو ><Fromهي ليست تاغات محجوزة
مسبقا ضمن الكلمات المحجوزة باللغة حيث يمكنك وضع االسماء التي ترغب بها وفيها بعد يمكنك
االستعالم من هذه التاغات كما ترغب.
-كما أن هذه اللغة ليست بديل HTMLأبدا كما أسلفنا ،وانما دعم لها لتخزين البيانات وهي
موصى بها من w3Cفي. February 10, 1998
4|Page
دورة في - XMLالدرس الثاني الجزء األول
ومن المالحظ كثيرا أن أغلب لغات البرمجة تحتوي على مكتبات خاصة للتعامل مع XMLمما يدل
على أهمية هذه اللغة.
من أشهر استخدامات هذه اللغة لـ :
. XHTML -
: WSDL -لتوصيف خدمات الويب.
.web services -
WAP -و : WMLكلغة ترميز لألجهزة المحمولة .handheld devices
: RSS -لتوصيف .RSS
: SMIL -لتوصيف ملفات الملتيميديا التي يتم تحميلها لموقع ويب ما.
5|Page
دورة في - XMLالدرس الثاني الجزء الثاني
إذا :كم رأينا أن لغة XMLهي لغة سهلة التوصيف وتتيح للمستخدم تحديد خياراته بنفسه.
قواعدها التي تحددها هي :
6|Page
. يجب أن يكون لدينا عقدة جذر أو عقدة أب-0
. كل العقد األخرى هي عقد أبناء لهذه العقدة الجذر-2
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
: XML وهنا مثال عملي عن بعض أسطر من ملف
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
7|Page
8|Page
دورة في - XMLالدرس الثالث الجزء األول
وهي حالة صحيحة في HTMLأما في XMLهذا غير صحيح وينتج عنه خطأ لذا يجب مراعاة
التنسيق كما يلي:
><b><i>This text is bold and italic</b></i
9|Page
><subchild>.....</subchild
></child
></root
ضمن التاغ noteالحظ الخاصية dateتم فيها وضع تاريخ ضمن اشارات تنصيص " " وهذا
ضروري جدا وإال هنالك خطأ.
مع العلم أن استخدم < و & هم فقط الغير قانوني بهذه اللغة ولكن من الجميل استعاضة كل المحارف
الخاصة األخرى بالرموز الخاصة بها ،ويأتي حجز هذه المحارف كونها مستخدمة ببناء تاغات اللغة.
حيث أن التعليق هو عبارة عن شرح ال يقوم المترجم الخاص باللغة بقراءته أو ترجمته كونه خاص
بالمستخدم يشرح شيء معين عن الكود وهو ليس ضمن الكود.
10 | P a g e
-القاعدة السابعة :
المسافات بين الكلمات يتم اقتطاعها في XMLتلقائيا لو كانت بمقدرا أكثر من مسافة واحدة بين
الكلمتين على عكس HTMLالتي تحافظ على المسافات كما كتبها المستخدم فمثال في HTMLيمكننا
كتابة التالي :
XML Learning
الحظ وجود المسافات بين الكلمتين أما في XMLلو حاولت كتابة النص السابق فسيظهر لك كما
يلي:
XML Learning
بوجود مسافة واحدة بين الكلمتين.
11 | P a g e
دورة في - XMLالدرس الثالث الجزء الثاني
><bookstore
>"<book category="CHILDREN
><title>Harry Potter</title
><author>J K. Rowling</author
><year>2005</year
><price>29.99</price
></book
>"<book category="WEB
><title>Learning XML</title
><author>Erik T. Ray</author
><year>2003</year
><price>39.95</price
></book
></bookstore
ان < >bookstoreو < >bookتحوي بداخلها مجموعة من العناصر وذلك ألنها تحتوي عناصر
من تاغات ونصوص .
كما أن التاغ < >bookيحتوي على الواصفة
"category="CHILDREN
وكذلك < >price< ،>year< ،>author< ،>titleتحتوي على نصوص وهي عناصر.
مالحظة :يمكن للتاغ أن ال يحتوي بداخله شيء ويكون ذو قيمة فارغة مثل:
<>book/<>book
ويمكن كتابتها بالشكل التالي < >/ bookأي اشارة /تأتي بعد اسم التاغ وليس قبله وتمسى هذه
الطريقة باإلغالق الذاتي للتاغ.
12 | P a g e
-قواعد تسمية الـتاغات في :XML
هذه الفقرة مهمة جدا في درسنا حيث أن التاغ يجب أن يتم كتابته بطريقة مفهومة وسلسلة وهنالك
مجموعة قواعد متفق عليها يجب اتباعها أثناء كتابتن للكود:
يمكن أن يحتوي اسم التاغ على نصوص أو أرقام أو أي محارف خاصة أخرى.
ال يمكن للتاغ أن يبدأ اسمه برقم أو عالمة ترقيم .
ال يمكن أن يبدأ اسم التاغ بأي شكل من أشكال األحرف التالية xmlسواء بأحرف كبيرة أو
صغيرة .
ال يمكن أن نقوم بوضع فراغات ما بين الكلمات لو كان التاغ مكون من أكثر من كلمة لذا
يفضل عندها وضع _ أو الكلمتان متالصقتان مع بدأ الكلمة الثانية بحرف كبير.
لذا عزيزي المبرمج وزميلي في الصفحة قم باختيار اسماء التاغات بكشل يوصف التاغ ومحتواه مثل
< >last_name< ،>first_nameلتعبر عن االسم األول واألخير.
وحاول أن يكون االسم قصير ومختصر قدر اإلمكان فهو اسهل للقراءة وترتيب بياناتك فاكتب مثال
< >book_titleبدال من :
><the_title_of_the_book
-ال تحاول استخدام اشارة الناقص -ألن بعض البرمجيات قدد تفهم من كودك أنك تريد طرح شيئين
من بعضهما وهو غير صحيح عندما نريد توصيف االسم األول مثال كما يلي first-name
-تجنب أيضا استخدام النقطة .ألن بعض البرمجيات تظن أن الكلمة الثانية هي خاصية من خواص
الكلمة األولى first.nameأي الكلمة nameهي احد خواص الغرض firstوهو غير صحيح.
-استخدامك ألحرف غير األنكليزية مثل éòáهو قانوني ولكن قد يسبب بعض المشاكل بالخرج لذا
ابتعد عنها.
بفرض أنك تريد ارسال مالحظة noteوليكن كود XMLالخاص بنا كما يلي:
><note
><to>Tove</to
><from>Jani</from
><body>Don't forget me this weekend!</body
></note
13 | P a g e
وفيما بعد أراد المبرمج أن يقوم بتوسيع البيانات التي سيتم ارسالها بالتطبيق لتصبح كما يلي:
><note
><date>2008-01-10</date
><to>Tove</to
><from>Jani</from
><heading>Reminder</heading
><body>Don't forget me this weekend!</body
></note
اي أنه اضاف التاغ Dateلملف XMLالخاص به فهل هنا تظهر رسالة خطأ ويتم انهاء التطبيق
دون نتيجة????
14 | P a g e
الواصفات Attributesفي !!!! XML
تعتبر srcهي واصفة من واصفات imgحيث تزودنا بمسار الصورة التي نرغب بعرضها.
وكذلك في XMLهي تعمل على تزويدنا بمعلومات اضافية عن العناصر الخاصة بالواصفة كما يلي:
><file type="gif">computer.gif</file
فالواصفة typeتحمل القيمة gifلتخبرنا أنا نوع الملف الذي قمنا بحفظ اسمه ضمن تاغ xmlهو
من نوع . gif
مالحظة :يجب وضع قيمة الواصفة ضمن اشارات تنصيص مفردة او مزدوجة هكذا " " أو هكذا ' '.
>"<person sex="female
>'<person sex='female
فإذا كانت قيمة الواصفة مثال تحتوي اشارات التنصيص المزدوجة يمكنك استخدام اشارات التنصيص
المفردة الحتواء كامل قيمة الواصفة كما في المثال التالي:
كما يمكن االستعاضة عن اشارات التنصيص السابقة بالبديل الخاص بها كما يلي:
-الثاني :
><person
><sex>female</sex
><firstname>Anna</firstname
><lastname>Smith</lastname
></person
سأقوم اآلن بطرح مثال ولكن بثالث طرق لتفهموا بشكل أوضح ماهي xmlوماهي الخيارات المتاحة
فيها.
األول :وفيه نستخدم التاريخ كواصفة
>"<note date="10/01/2008
><to>Tove</to
><from>Jani</from
><heading>Reminder</heading
><body>Don't forget me this weekend!</body
></note
16 | P a g e
><body>Don't forget me this weekend!</body
></note
الثالث :وفيه نفصل التاريخ كعناصر اي اليوم عنصر والشهر عنصر أخر والسنة عنصر آخر
><note
><date
><day>10</day
><month>01</month
><year>2008</year
></date
><to>Tove</to
><from>Jani</from
><heading>Reminder</heading
><body>Don't forget me this weekend!</body
></note
وأنا شخصيا أفضل استخدام الطريقة الثالثة اي استخدام العناصر elementsوتفصيل العناصر عن
بعضها البعض كما في المثال الثالث السابق والسبب يعود لما يلي :
أحد أبرز استخدامات الواصفة Attributeهي استخدامها لحفظ IDالكتلة التي نقوم بتخزينها كما
في المثال التالي :
17 | P a g e
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
18 | P a g e
دورة في - XMLالدرس الخامس
19 | P a g e
الحل لمشكلة تضارب األسماء !!!!!
الحل بسيط جدا حيث يمكننا أن نقوم بتمييز األسماء لعناصر XMLمن خالل وضع بادئة لهذا الكود،
أنت تتساءل ماذا يعني بادئة ببساطة هي باالنكليزية Prefixولشرح كيف نقوم بها يمكنك اإلطالع
على المثال التالي :
><h:table
><h:tr
><h:td>Apples</h:td
><h:td>Bananas</h:td
></h:tr
></h:table
><f:table
><f:name>African Coffee Table</f:name
><f:width>80</f:width
><f:length>120</f:length
></f:table
بساطة. بكل XML كود عن HTML كود تمييز يمكن الطريقة بهذه
الستخدام الطريقة السابقة عليك تعريف فضاء األسماء الخاص بذلك حيث يتم ذلك ضمن التاغ األول
او الجذر الذي بدأ فيه استخدام هذه البادئة حيث يمكن استدعاء فضاء األسماء السابق من خالل
xmlnsكما يلي:
"xmlns:prefix="URI
>"<h:table xmlns:h="http://www.w3.org/TR/html4/
><h:tr
><h:td>Apples</h:td
><h:td>Bananas</h:td
></h:tr
20 | P a g e
</h:table>
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
، النقطتان بعد الحرف:f و:h > أخذت القيمتينtable< في التاغxmlns الواصفة،في هذا المثال
. XML هنا تم اعطاء هذين الحرفين لتأهيل البادئتين ليتم استخدامهما في كود
مع العلم أنه بما أننا قمنا بتعرف بادئة لعنصر أب فإن كافة العناصر األبناء تأخذ هذه البادئة عند
.التعريف
) في المكان الذي نرغب باستخدامه فيها أو ضمنxmlns( كما يمكن أن يتم التصريح عم البادئة
.العقدة الجذر
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
21 | P a g e
مالحظة :استخدام الرابط URIضمن تعريف البادئة
هو ليس ألغراض برمجية وللقيام بعمليات تحليل
ضمن مترجم اللغة ،وانما هو فقط العطاء اسم فريد
لفضاء األسماء الذي نقوم بتعريفه.
22 | P a g e
دورة في - XMLالدرس السادس الجزء األول
لذا لتجنب أي أخطاء صادرة عن سوء الترميز يجب علينا تحديد ترميز للمحارف التي يتم ادخالها أو
حفظ ملف XMLالخاص بنا على أنه .... UTF-8
تزميز لمحارف يعمل على تحديد رمز ثنائي binary codeفريد لكل المحارف الغريبة التي يتم
استخدامها وتخزينها في هذا الملف.
ويمكن أن نطلق أيضا على ترميز المحارف تموضع المحارف character setأو حتى خريطة
المحارف character mapأو تموضع الكود code setأو صفحة الكود . code page
ماهو Unicode؟؟؟؟
هو معيار خلق ترميز المحارف لمستند نصي ما ،حيث يقوم بتعريف أغلب اللغات العالمية من خالل
اعطائها اسم ورقم خاص بهذه اللغة.
وتحتوي Unicodeعلى متغيرين اثنين هما UTF-8و . UTF-16
-حيث أن UTFهي اختصار لـ Universal character set Transformation
Format
: UTF-8 -تستخدم بايت واحد (ثمانية بيتات) للمحارف األكثر شيوعا ،و بايتين أو ثالثة
لبقية المحارف وهي األساسية Standardلشبكة الويب وهي الترميز االفتراضي لـ
.HTML-5, CSS, JavaScript, PHP, SQL, XML
23 | P a g e
أين يمكن أن أقوم بالتعريف على الترميز الذي أرغب ????
في السطر األول من مستند XML
>?"<?xml version="1.0
إن كافة التطبيقات التي تستخدم لقراءة تطبيقات XMLافتراضيا تستطيع قراءة الترميز UTF-8و
. UTF-16
فإذا كان الترميز على الكمبيوترات الثالثة غير صحيح فإن المتصفح يقوم بعرض المحارف بشكل
غير مفهوم أو يقوم بعرض رسالة خطأ.
24 | P a g e
دورة في - XMLالدرس السادس الجزء الثاني
حيث أنه يتم تلوين اسم العقد في المتصفح ويتم اضافة اشارة +و -ليتم تمديد وفتح الكود او تصغيره
أي expandو . collapse
ولعرض النص االساسي لملف XMLبدون تلوينات أو اشارات +و -قم بعرض مصدر الصفحة
التي أنت تقوم بفتحها.
ويتم العرض بهذه الطريقة كون XMLال تهتم بطريقة عرض البيانات وانما كما قلنا هي مخزن
بسيط للبيانات .
جيدا. فيها لتتمعنوا XML ملفات لثالث رابط يلي وفيما
http://www.4shared.com/rar/0Xcb09Mzce/XML_Example.html
25 | P a g e
الدرس السادس الجزء الثالث- XML دورة في
26 | P a g e
: التاليCSS وليكن لدينا ملف
CATALOG
{
background-color: #ffffff;
width: 100%;
}
CD
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}
TITLE
{
color: #FF0000;
font-size: 20pt;
}
ARTIST
{
color: #0000FF;
font-size: 20pt;
}
COUNTRY,PRICE,YEAR,COMPANY
{
display: block;
color: #000000;
margin-left: 20pt;
}
27 | P a g e
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
<CATALOG>
<CD>
28 | P a g e
دورة في XML -الدرس السابع الجزء األول
أنواع الملفات في !!!! XML
عندما نقوم بكتابة ملف XMLمعين ويكون كل التعليمات فيه صحيحة يسمى هذا الملف Well
.formed
وللتذكير فقط الملف الصحيح البنية في XMLيجب أن يحقق القواعد التالية:
يجب أن يحتوي ملف XMLالعنصر الجذر . root -
كل عنصر من عناصر XMLيجب أن يكون له تاغ لإلغالق. -
تاغات XMLهي حساسة لحالة األحرف. -
العناصر يجب أن تكون محتوات بعضها ضمن بعض . nested -
قيم الواصفات في XMLيجب أن يتم وضعها ضمن علمتي التنصيص" " . -
اليوم درسنا ليس كالمعتاد قمنا بذكر قواعد كتابة XMLوقمنا بتزويدكم بكود XMLوأقدم لكم رابط
لموقع يعمل كمصحح ألكواد. XML
وهذا هو الرابط:
http://validator.w3.org/#validate_by_input
اآلن عليكم الدخول للرابط السابق وكتابة كود XMLالخاص بكم والتحقق من النتيجة.
كما أنني سأقوم بتزويدكم بوظيفة قوموا فيها باختبار مهاراتكم الشخصية ،الوظيفة هي تصحيح األكواد
التالية:
29 | P a g e
:الكود األول
<?xml version="1.0" encoding="UTF-8"?>
<note/>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
:الكود الثاني
<?xml version="1.0" encoding="UTF-18"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
:الكود الثالث
<?xml version=1.0 encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
30 | P a g e
الكود الرابع:
>?"<?xml version="1.0" encoding="UTF-8
><note
><to>Tove</to
><from>Jani</from
><heading>Reminder</heading
><body>Don't forget me this weekend!</Body
></note
قم بزيارة الرابط المرفق وقم بتدقيق األكود السابقة ولكن قبل ذلك أتمنى أن تحاولو تدقيق األكواد
بأنفسكم ومن دون غش ،ثم ان فشلتم ستجدون الحل بالرابط المرفق على الرابط السابق.
31 | P a g e
دورة في - XMLالدرس السابع الجزء الثاني
ماذا تعني هذه الصيغة? ماذا يعني هذا الكالم ? تابعوا معي !!!!
! : DOCTYPE noteيحدد أن هذا العنصر noteهو العنصر الجذر في الوثيقة. -
! : ELEMENT noteيقوم بتعريف أن الجذر noteيحتوي على العناصر التالية : -
to,from,heading,body
: ELEMENT toيحدد أن هذا العنصر هو من النوع . PCDATA -
: ELEMENT fromيحدد أن هذا العنصر هو من النوع . PCDATA -
: ELEMENT headingيحدد أن هذا العنصر هو من النوع . PCDATA -
: ELEMENT bodyيحدد أن هذا العنصر هو من النوع . PCDATA -
مالحظة :PCDATAتعني أنه نص قابل لتحليل محتواه ألنواع بيانات.
parse-able text data
كما أن الترويسة DocTypeتصلح ألن تستخدم لكتابة محتوى ملف DTDكما يلي:
32 | P a g e
<!ENTITY copyright "Copyright: W3Schools.">
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<footer>&writer; ©right;</footer>
/<note>
; ثم فاصلة منقوطةwriter وجود اشارة &ثم اسم الكيان مثالFooter الحظ معي في العنصر
وwriter وnbsp عرفنا الكيانات التاليةDTD في نصDocType والحظ في محتوى
السابقة بالطريقة يتم الكيان استدعاء أن حيث copyright
: & ثم اسم الكيان ثم الفاصلة المنقوطة ; عند تنفيذ الملف السابق وعرضه تظهر النتيجة كما يلي
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<footer>Writer: Donald Duck. Copyright: W3Schools.</footer>
</note>
33 | P a g e
دورة في - XMLالدرس الثامن الجزء األول
34 | P a g e
دورة في - XMLالدرس الثامن الجزء الثاني
في المثال التالي سنقوم بشرح كيف يمكن لنا االتصال مع ملف : XML
)if (window.XMLHttpRequest
{// code for IE7+, Firefox, Chrome, Opera, Safari
;)(xmlhttp=new XMLHttpRequest
}
else
{// code for IE6, IE5
;)"xmlhttp=new ActiveXObject("Microsoft.XMLHTTP
}
;)xmlhttp.open("GET","books.xml",false
;)(xmlhttp.send
;xmlDoc=xmlhttp.responseXML
في البداية قمنا بالتأكد من نوع المتصفح فإذا كان حديثا قم
بإنشاء XMLHttpRequestوقم بتخزينه ضمن المتحول
xmlhttpوإال قم بإنشاء ActiveXObjectوقم بتخزينه
ضمن المتحول نفسه . xmlhttp
فيما بعد قم بقتح االتصال مع ملف : XML
;)xmlhttp.open("GET","books.xml",false
وسيتم شرحه في درس الحق.
ثم قم بإرسال طلب XMLHttpRequestثم خزن االستجابة في المتحول xmlDoc
بكل بساطة هكذا يتم االتصال مع ملفات XML
35 | P a g e
دورة في XML -الدرس التاسع ( تذكرة )
اآلن لنطبق مثال عملي ولتفهم أكثر قم بتحميل المرفقات ملف HTMLمع ملف XMLمن الرابط
التالي:
?http://www.4shared.com/rar/3KC8DTHtce/Example__1_.html
ملف : HTML
><html
><body
><h1>W3Schools Internal Note</h1
><div
><b>To:</b> <span id="to"></span><br /
><b>From:</b> <span id="from"></span><br /
><b>Message:</b> <span id="message"></span
></div
><script
)if (window.XMLHttpRequest
{// code for IE7+, Firefox, Chrome, Opera, Safari
;)(xmlhttp=new XMLHttpRequest
}
else
{// code for IE6, IE5
;)"xmlhttp=new ActiveXObject("Microsoft.XMLHTTP
}
36 | P a g e
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
: XML ملف
<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy -->
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
: HTML أظن أنكم قادرين على قراءة الملف السابق ففي الجزء التالي من ملف
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
37 | P a g e
قمنا بتعريف spanواعطينا كل واحد IDخاص به حتى نقوم الحقا بالكتابة فيهم من خالل الجافا
سكريبت.
في الجزء :
><script
></script
نقوم بكتابة الكود الخاص بنا بالجافا سكريبت وسأعيد شرح الكود خطوة بخطوة للتذكير:
)if (window.XMLHttpRequest
{// code for IE7+, Firefox, Chrome, Opera, Safari
;)(xmlhttp=new XMLHttpRequest
}
else
{// code for IE6, IE5
;)"xmlhttp=new ActiveXObject("Microsoft.XMLHTTP
}
هنا نقوم بتعريف متحول xmlhttpنخزن فيه الطلب HTTPالذي سنقوم باستخدامه إلرسال
واستقبال البيانات من خالله هو المفتاح الذي يمكننا من الولوج للسيرفر وتنفيذ التعليمات الخاصة بنا.
;)xmlhttp.open("GET","note.xml",false
;)(xmlhttp.send
;xmlDoc=xmlhttp.responseXML
هنا نقوم بإخبار المتحول xmlhttpأن يقوم بفتح االتصال مع الملف note.xmlفي السيرفر ويستعد
للقراءة ومن ثم نرسل الطلب للسيرفر وأخير نقوم بقراءة البيانات من ملف XMLفي response
ونخزنها ضمن المتحول. xmlDoc
اآلن المتحول xmlDocيحوي كل البيانات الخاصة بملف XMLيمكننا طلبها من خالله .اآلن
وبالتعليمة التالية:
=document.getElementById("to").innerHTML
;xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue
نقوم بجلب البيانات من العقدة toفي ملف XMLونقوم بكتابة محتوى العقدة ضمن عنصر HTML
الذي قمنا بتعريفه وهو spanوالذي يحملID=to .
38 | P a g e
وكذلك في باقي العناصر ، from,messageاذا الحظنا كيف تتم عملية القراءة.
مالحظة :التعليمة getElementsByTagNameتقوم بالبحث عن التاغ الذي نقوم بإعطائها
اسمه.
39 | P a g e
الدرس العاشر- XML دورة في
في المرفقات على الرابط التالي مثال كامل الشرح وكي ال تصبح الصفحة طويلة من كثرة الكود
: البرمجي سأقوم باختصاره والشرح عليه ويمكنكم أصدقائي تحميل المثال كامال من الرابط
http://www.4shared.com/rar/OSkKs0Kaba/CD_Catalog_Example.html
: كما يليXML اآلن سأبدأ بالشرح على الكود هنا جزء من ملف
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
</CATALOG>
HTML أكيد أنتم لستم بحاجة لشرح هذا الكود فالمتابعين أصبحوا خبراء بقراءته وأقدم لكم كود
: الخاص بهذا الكود
<html>
<body>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
40 | P a g e
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
{
document.write("<tr><td>");
document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].
nodeValue);
document.write("</td><td>");
document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].n
odeValue);
document.write("</td></tr>");
}
document.write("</table>");
</script>
</body>
/<html>
فبعد تعريف المتحول، تحديداFor هذا ربما يحتاج للقليل من الشرح والشرح سيكون عند حلقة
: بداخله وارسال بيانات الطلب إلى السيرفر من خاللXMLHttpRequest وتخزينxmlhttp
xmlhttp.open
xmlhttp.send
HTML اآلن سنبدأ الكتابة على ملف، xmlDoc في المتحولresponseXML وتخزين اإلجابة
: الخاص بنا من خالل تعليمة
document.write)""(;
41 | P a g e
إن مابين اشارات التنصيص " " كله سيتم كتابه على الصفحة سواء من نصوص أو تاغات HTML
نقوم بتعريف المتحول xونخزن به العنصر الذي يحمل اسم التاغ : CD
;)"xmlDoc.getElementsByTagName("CD
حيث أن xهو اآلن بمثابة مصفوفة تحوي بداخلها بيانات CDمرتبة بحسب التاغات حيث أن التاغ
األول artistرقمه صفر والتاغ الثاني TITLEرقمه واحد وذلك سيكون ضمن حلقة forفقط التي
ستأتي الحقا.
اآلن نقوم بكتابة ترويسة بداية رسم الجدول على الصفحة كما يلي :
;)">'document.write("<table border='1
متحول البدء هو iويبدأ بالقيمة صفر نقوم برسم trو ثم Tdعلى الصفحة
;)">document.write("<tr><td
اآلن قمنا بكتابة محتوى لعقدة artistبعد أن قمنا بالبحث عن التاغ الذي يحمل ذلك االسم .أما اآلن
علينا إغالق trالخاصة بنا وفتح tdجديدة :
;)">document.write("</td><td
من ثم علينا الكتابة ضمن tdالجديدة وسنقوم بكتابة TITLEفيها كما يلي:
document.write(x[i].getElementsByTagName
;)("TITLE")[0].childNodes[0].nodeValue
واآلن نقوم بإغالق tdو trمعا كون لدينا جدول يحتوي على عمودين فقط وعدة أسطر وتستمر حلقة
forبالقراءة من المصفوفة xعنصر يلي العنصر اآلخر وهكذا حتى يتم قراءة كامل الملف وكتابة
محتواه بالشكل السابق ضمن الصفحة لدينا.
وأخيرا بعد انتهائن من حلقة forلن ننسى إغالق الجدول Tableالخاص بنا بالتعليمة :
;)">document.write("</table
وذلك حتى يكتمل التصميم ،ولمن لم يفهم جيدا ماذا كان يجري أقول له عندما نريد بناء جدول يكون
بالشكل التالي :
42 | P a g e
><table
><tr
><td></td
><td></td
></tr
></table> </table
نحن كل ما قمنا به هو استخدام التعليمة document.writeلرسم هذا الجدول على الصفحة وقد
قمنا برسمه سطرا سطرا ،حيث قمنا بكتابة ضمن " " الخاصين بهذه التعليمة
السطر األول < >tableومن ثم السطر الثاني كان ضمن حلقة forكما يلي:
><tr
><td
ثم أخذنا النص الذي سيكتب بالخلية من المصفوفة xثم أغلقنا الخلية األولى وفتحنا الخلية الثانية
><td><td/
ثم نكتب النص المفترض من المتحول xوهو المصفوفة ومن ثم نغلق الخلية الثانية <>td><tr/
والسطر كامال لتعود حلقة forمن جديد للدورا وترسم سطرا جديدا.
43 | P a g e
الدرس الحادي عشر- XML دورة في
name, وضمنها العقد األبناءrecord فيها عقدة أسياسية هيrecords بحيث أن العقدة الجذر هي
. Email, Comment
مع زر حفظ كما في الصورة المبينة أدناه سنقوم بادخالtextbox سنقوم بإعداد ثالث مربعات نصية
ليتم تخزين البيانات في ملفsave االسم والبريد اإللكتروني والمالحظة ثم ننقر على زر الحفظ
StoreUserInfo.xml يحمل االسمXML
الموجود على أرضية السيرفر مباشرة (أي أنه غير مضمن داخل أي مجلد) عند النقر على الزر سيتم
:تنفيذ الكود التالي
XmlDocument oXmlDocument = new XmlDocument();
oXmlDocument.Load(Server.MapPath("StoreUserInfo.xml"));
XmlNode oXmlRootNode = oXmlDocument.SelectSingleNode("records");
XmlNode oXmlRecordNode =
oXmlRootNode.AppendChild(oXmlDocument.CreateNode(XmlNodeType.
Element,"record",""));
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element,"name","")).InnerText=TextBox1.Text;
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element, "Email", "")).InnerText = TextBox2.Text;
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element, "Comment", "")).InnerText = TextBox3.Text;
oXmlDocument.Save(Server.MapPath("StoreUserInfo.xml"));
44 | P a g e
سأقوم بشرح هذا الكود بالتفصيل سطرا سطرا :
-السطر األول :
;)(XmlDocument oXmlDocument = new XmlDocument
عرفنا متحول من نوع XmlDocumentمهمته فتح ملف xmlلنقوم بحفظ البيانات فيه الحقا وهو
الفيزيائي. xml ملف على التغيرات تطبيق عن المسؤول
45 | P a g e
: السطر السادس-
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode
(XmlNodeType.Element, "Email", "")).InnerText = TextBox2.Text;
ونقوم بتزيدها بالبيانات الخاصة بها ونحصل علىrecord ضمن العقدةemail نقوم بإنشاء العقدة
.هذه البيانات من مربع النص الثاني
: السطر السابع-
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode
(XmlNodeType.Element, "Comment", "")).InnerText = TextBox3.Text;
ونقوم بتزيدها بالبيانات الخاصة بها ونحصلrecord ضمن العقدةcomment نقوم بإنشاء العقدة
.على هذه البيانات من مربع النص الثالث
: السطر الثامن-
oXmlDocument.Save(Server.MapPath("StoreUserInfo.xml"));
. الموجود على السيرفرxml نقوم فيه بحفظ البيانات الحاصلة جميعا في ملف
: ليكون الكود كما يليVB.NET اآلن نفس الخوات السابقة نقوم بتطبيقها بكود
Dim oXmlDocument As XmlDocument = New XmlDocument
oXmlDocument.Load(Server.MapPath("StoreUserInfo.xml"))
Dim oXmlRootNode As XmlNode =
oXmlDocument.SelectSingleNode("records")
Dim oXmlRecordNode As XmlNode =
oXmlRootNode.AppendChild(oXmlDocument.CreateNode(XmlNodeType.
Element, "record", ""))
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element, "name", "")).InnerText = TextBox1.Text
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element, "Email", "")).InnerText = TextBox2.Text
oXmlRecordNode.AppendChild(oXmlDocument.CreateNode(XmlNodeTyp
e.Element, "Comment", "")).InnerText = TextBox3.Text
oXmlDocument.Save(Server.MapPath("StoreUserInfo.xml"))
46 | P a g e
الدرس الثاني عشر- XML دورة في
name, وضمنها العقد األبناءrecord فيها عقدة أسياسية هيrecords بحيث أن العقدة الجذر هي
. Email, Comment
47 | P a g e
;)(TextBox3.Text = dr["Comment"].ToString
}
else
;"Label2.Text = "not found
}
}
في الكود السابق قمنا بتعريف Datasetوهي dsوجعلناها تقرأ من الملف الخاص بنا والذي يحمل
االسم StoreUserInfo.xmlمن خالل التعليمة
;))"ds.ReadXml(Server.MapPath("StoreUserInfo.xml
حيث أن التابع ReadXMLهو أحد توابع datasetالذي مهمته قراءة ملف xmlوتخزينه ضمن
datasetعلى هيئة جداول.
48 | P a g e
: التاليVB.NET وبنفس الخطوات السابقة يكون لدينا كود
Dim ds As DataSet = New DataSet
ds.ReadXml(Server.MapPath("StoreUserInfo.xml"))
Dim i As Integer = 1
Label1.Text = i.ToString
Dim dt As DataTable = ds.Tables(0)
i=1
Do While (i <= dt.Rows.Count)
If (i <= dt.Rows.Count) Then
Dim dr As DataRow = dt.Rows((i - 1))
Dim Str As String = dr("name").ToString
If (Str = TextBox5.Text) Then
TextBox1.Text = dr("name").ToString
TextBox2.Text = dr("Email").ToString
TextBox3.Text = dr("Comment").ToString
Else
Label2.Text = "not found"
End If
End If
i = (i + 1)
Loop
نهاية الدورة
لكم بشكل جيدXML أرجو أن أكون قد وفقت في شرح لغة
Tammam زميلكم
49 | P a g e