وانا بتصفح بعض السورسات فى Mono لقيت SmallXMLParser –وهو مبنى على الأحداث مشابه ل SAX- .. على كل حال قررت اكتب واحد لبايثون (على سبيل التطبيق 😉 )
تقدر تطلع عليه من هنا وكيفية الإستخدام فى ملف test.py
الفكرة انك تشتق الصف XMLReader كما فى BooksXMLReader وتعيد تعريف ال callbacks اللى تهمك مثل onStartTag (بيتم استدعاءها عند بداية كل tag) و onCharacters بيتم استدعاءها عند المحتوى و onEndTag عند انهاء tag معين و onComment بيتم استدعاءها عند البدأ فى قراءة comment و onPI عند كل Processing Instruction
فى الدالة testReadingBooks بتنشئ كائن BooksXMLReader وتمرر file object فى ال __init__ لو مش فى ملف فى string تقدر تستدعى الدالة create_stream علي ال string
تستدعى الطريقة start ليتم بدأ المعالجة
تقدر تستفيد من ال Reader بإنك تعمل حاجات كتير زى INI parser او غيرهم!
مش اجهدت الparser مع ملفات اكبر من 2 ميجا (صح ياستورم؟ :D)
ال APIs مازلت محتاجة refractoring
اى ملاحظات او تعليقات حوله لاتتردد فى مراسلتى.
بمناسبة ال parsing تابع الموضوع Heist مفسر Scheme مكتوب بروبى
كنت مخلص ريبورتات وكانت ناقصة على التسليم فقعدت حوالى ساعة بحاول اعرف البرنتر وفى الآخر طلعت مش متوصلة بالجهاز اساسا وربنا ستر 😀
وبس كدا اشوفكم قريبا 🙂
اه صح 😀 , بس انا مش واثق فيك بأمانه 😛
—snip—
]كنت مخلص ريبورتات وكانت ناقصة على التسليم فقعدت حوالى ساعة بحاول اعرف البرنتر وفى الآخر طلعت مش متوصلة بالجهاز اساسا وربنا ستر 😀
—snip—
ههههههههههههههههههههههههههههههههههههههههههههههههه
احسن 😛
تمام يا باشا يس مش عارف هجرب ازاى
فارقت الجهاز و الجهاز فارقنى :S
يلا يمكن ربنا يمن يرزقنى بحتة لابتوب و لا حاجة 🙂
كنت بتعمل ايه فى سورسات مونو :p ?
الفكرة حلوة بس فى حاجة انت هنا ماتبعتش نفس الأسلوب مثلا فى
startElement(tag, attributes)
ولكن بتستخدمها
onStarttag(tag)
وكده بنوصل ل attributes كأنها property
التطبيق جميل جدا شكرا
@St0rM
ال مش واثق ال
@Abom:
ربنا يرزقك بلابتوبين تلاته ويسهل عليك الكونكشن:D
@Akram:
فعلا انا شايف ان ال attrs تنتمى للأوبجكت مش تتمرر لل callback
ملحوظة فى ال onEndTag مش بيتمرر tag object لكن string