14. معالجة مستندات XML
![]() |
انظر المستند XML التالي:
<tribu>
<enseignant>
<personne sexe="M">
<nom>dupont</nom>
<prenom>jean</prenom>
<age>28</age>
ceci est un commentaire
</personne>
<section>27</section>
</enseignant>
<etudiant>
<personne sexe="F">
<nom>martin</nom>
<prenom>charline</prenom>
<age>22</age>
</personne>
<formation>dess IAIE</formation>
</etudiant>
</tribu>
نقوم بتحليل هذا المستند لإنتاج الناتج التالي على وحدة التحكم:
tribu
enseignant
(personne,(sexe,M) )
nom
[dupont]
/nom
prenom
[jean]
/prenom
age
[28]
/age
/personne
section
[27]
/section
/enseignant
etudiant
(personne,(sexe,F) )
nom
[martin]
/nom
prenom
[charline]
/prenom
age
[22]
/age
/personne
formation
[dess IAIE]
/formation
/etudiant
/tribu
نحتاج إلى معرفة كيفية التعرف على:
- علامة البداية مثل <training>؛
- علامة نهاية مثل </teacher>؛
- علامة بداية مع سمات مثل <person gender="F">؛
- نص العلامة، مثل "martin" في <name>martin</name>.
يُطلق على البرنامج الذي يقوم بتحليل كود XML اسم محلل XML. توفر وحدتان الوظائف اللازمة لتحليل كود XML: xml.sax و xml.sax.handler.
توفر لنا الوحدة النمطية [xml.sax] محلل XML باستخدام العبارة التالية:
يقوم هذا المحلل بتحليل نص XML بالتسلسل. ويستدعي الطرق التي يحددها المستخدم عند وقوع الأحداث:
- طريقة startElement عند علامة البداية؛
- طريقة endElement عند علامة الإغلاق؛
- طريقة characters على نص العلامة.
علينا أن نخبر المحلل أي فئة تنفذ هذه الطرق:
نقوم بتمرير مثيل لفئة تنفذ طرق startElement و endElement و characters إلى طريقة setContentHandler الخاصة بالمحلل. الفئة المستخدمة هي فئة فرعية من فئة xml.sax.handler.ContentHandler. يتم استدعاء الطرق السابقة مع المعلمات:
- name هو اسم علامة البداية. attributes هو قاموس سمات العلامة. وبالتالي، بالنسبة للعلامة <person sex="M">، سيكون لدينا name="person" و attributes={'sex':'M'}
- name هو اسم علامة النهاية. وبالتالي، بالنسبة لعلامة </student>، سيكون لدينا name='student'.
- data هو نص العلامة. وبالتالي، إذا كانت العلامة
سيكون لدينا data='\r\n dupont\r\n '. بشكل عام، سنقوم بإزالة المسافات البيضاء التي تسبق البيانات وتليها.
الآن بعد توضيح ذلك، يمكننا الانتقال إلى البرنامج النصي لتحليل مستند XML:
ملاحظات:
- يستخدم البرنامج النصي مكتبة الوظائف من وحدتي xml.sax و xml.sax.handler (السطر 3)؛
- السطر 62: ملف XML الذي تم تحليله؛
- السطر 68: محلل XML؛
- السطر 70: سيكون معالج الأحداث الصادرة عن المحلل مثيلًا لفئة XmlHandler؛
- السطر 72: يبدأ تحليل مستند XML؛
- السطر 6: الفئة التي تنفذ طرق startElement و endElement و characters. وهي مشتقة من فئة xml.sax.handler.ContentHandler، التي تنفذ الطرق المستخدمة من قبل المحلل؛
- السطر 9: طريقة startElement؛
- السطر 30: طريقة endElement؛
- السطر 41: طريقة characters.
النتائج هي تلك المعروضة في بداية هذه الفقرة.
