XML بيثون - معالجة Python XML Processing
بيثون - معالجة XML
Python XML Processin
بيثون - معالجة XML Python XML Processing
XML هي لغة محمولة ومفتوحة المصدر تتيح للمبرمجين تطوير تطبيقات يمكن قراءتها بواسطة تطبيقات أخرى ، بغض النظر عن نظام التشغيل و / أو اللغة التطويرية.
What is XML?
لغة التوصيف القابلة للتوسيع (XML) هي لغة توصيفية تشبه إلى حد كبير HTML أو SGML. يوصى بذلك اتحاد شبكة الويب العالمية ومتاح كمعيار مفتوح.
XML مفيد للغاية لتتبع كميات صغيرة إلى متوسطة من البيانات دون الحاجة إلى العمود الفقري المستندة إلى SQL.
XML Parser Architectures and APIs
توفر مكتبة Python القياسية مجموعة بسيطة ولكنها مفيدة من الواجهات للعمل مع XML.
واجهات برمجة التطبيقات (API) الأساسية الأكثر شيوعًا والمستخدمة على نطاق واسع لبيانات XML هما واجهات SAX و DOM.
- Simple API for XML (SAX) −
- هنا ، يمكنك تسجيل عمليات الاسترجاعات للأحداث ذات الاهتمام ثم السماح للمحلل بالمتابعة خلال المستند. يكون هذا مفيدًا عندما تكون مستنداتك كبيرة أو يكون لديك قيود على الذاكرة ، وتقوم بتوزيع الملف أثناء قراءته من القرص ولا يتم تخزين الملف بالكامل في الذاكرة مطلقًا.
- Document Object Model (DOM) API
- - هذه توصية لمجموعة World Wide Web Consortium حيث يتم قراءة الملف بالكامل في الذاكرة وتخزينه في نموذج هرمي (قائم على شجرة) لتمثيل جميع ميزات مستند XML.من الواضح أن SAX لا يمكنها معالجة المعلومات بأسرع ما يمكن عند استخدام ملفات كبيرة. من ناحية أخرى ، يمكن أن يؤدي استخدام DOM بشكل حصري إلى قتل مواردك ، خاصةً إذا تم استخدامها في الكثير من الملفات الصغيرة.SAX للقراءة فقط ، بينما يسمح DOM بإجراء تغييرات على ملف XML. نظرًا لأن هذين APIs المختلفين يكمل كل منهما الآخر حرفيًا ، فلا يوجد سبب يمنعك من استخدامهما في المشروعات الكبيرة.بالنسبة لجميع أمثلة أكواد XML الخاصة بنا ، فلنستخدم ملف XML بسيط للأفلام. xml كمدخل -
shelf="New Arrivals">
title="Enemy Behind">
War, Thriller
Parsing XML with SAX APIs
SAX هي واجهة قياسية لتحليل XML المبني على الأحداث. يتطلب تحليل XML مع SAX عمومًا إنشاء ContentHandler الخاص بك عن طريق التصنيف الفرعي xml.sax.ContentHandler.
يتعامل ContentHandler مع علامات وسمات نكهة XML الخاصة بك. يوفر كائن ContentHandler طرقًا لمعالجة أحداث التحليل المختلفة. المحلل اللغوي الخاص به يستدعي أساليب ContentHandler لأنه يوزع ملف XML.
يتم استدعاء أساليب startDocument و endDocument في بداية ونهاية ملف XML. يتم تمرير أحرف الطريقة (النص) بيانات الأحرف لملف XML عبر نص المعلمة.
يتم استدعاء ContentHandler في بداية ونهاية كل عنصر. إذا كان المحلل اللغوي غير موجود في وضع مساحة الاسم ، فسيتم استدعاء الأساليب startElement (العلامة والسمات) و endElement (العلامة) ؛ وإلا ، فإن الأساليب المقابلة startElementNS و endElementNS تسمى. هنا ، العلامة هي علامة العنصر ، والسمات هي كائن سمات.
فيما يلي طرق مهمة أخرى لفهمها قبل المتابعة -
The make_parser Method
يتبع الأسلوب التالي كائن محلل جديد وإعادته. سيكون كائن المحلل اللغوي الذي تم إنشاؤه من النوع الأول الذي يعثر عليه النظام.
xml.sax.make_parser( [parser_list] )
هنا تفاصيل المعلمات -
- parser_list −
- الوسيطة الاختيارية التي تتكون من قائمة من المحللون المراد استخدامها والتي يجب أن تطبق جميعها على أسلوب make_parser.
The parse Method
يتبع الأسلوب التالي محلل SAX ويستخدمه لتحليل مستند.
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
هنا تفاصيل المعلمات -
- xmlfile −
- هذا هو اسم ملف XML للقراءة منه.
- contenthandler −
- يجب أن يكون هذا كائن ContentHandler.
- errorhandler −
- في حالة التحديد ، يجب أن يكون errorhandler كائن SAX ErrorHandler.
The parseString Method
هناك طريقة أخرى لإنشاء محلل SAX وتحليل سلسلة XML المحددة.
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
هنا تفاصيل المعلمات -
- xmlstring −
- هذا هو اسم سلسلة XML للقراءة منه.
- contenthandler −
- يجب أن يكون هذا كائن ContentHandler.
- errorhandler −
- في حالة التحديد ، يجب أن يكون errorhandler كائن SAX ErrorHandler.
مثال Example
#!/usr/bin/python import xml.sax class MovieHandler( xml.sax.ContentHandler ): def __init__(self): self.CurrentData = "" self.type = "" self.format = "" self.year = "" self.rating = "" self.stars = "" self.description = "" # Call when an element starts def startElement(self, tag, attributes): self.CurrentData = tag if tag == "movie": print "*****Movie*****" title = attributes["title"] print "Title:", title # Call when an elements ends def endElement(self, tag): if self.CurrentData == "type": print "Type:", self.type elif self.CurrentData == "format": print "Format:", self.format elif self.CurrentData == "year": print "Year:", self.year elif self.CurrentData == "rating": print "Rating:", self.rating elif self.CurrentData == "stars": print "Stars:", self.stars elif self.CurrentData == "description": print "Description:", self.description self.CurrentData = "" # Call when a character is read def characters(self, content): if self.CurrentData == "type": self.type = content elif self.CurrentData == "format": self.format = content elif self.CurrentData == "year": self.year = content elif self.CurrentData == "rating": self.rating = content elif self.CurrentData == "stars": self.stars = content elif self.CurrentData == "description": self.description = content if ( __name__ == "__main__"): # create an XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # override the default ContextHandler Handler = MovieHandler() parser.setContentHandler( Handler ) parser.parse("movies.xml")
هذا من شأنه أن ينتج النتيجة التالية -
*****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Year: 2003 Rating: PG Stars: 10 Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Year: 1989 Rating: R Stars: 8 Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Stars: 10 Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Stars: 2 Description: Viewable boredom
للحصول على تفاصيل كاملة حول وثائق SAX API ، يرجى الرجوع إلى واجهات برمجة التطبيقات Python SAX القياسية.
Parsing XML with DOM APIs
تحليل XML مع DOM واجهات برمجة التطبيقات
نموذج كائن المستند ("DOM") هو واجهة برمجة تطبيقات مشتركة للغة من اتحاد شبكة الويب العالمية (W3C) للوصول إلى مستندات XML وتعديلها.
DOM مفيد للغاية لتطبيقات الوصول العشوائي. يتيح لك SAX عرض جزء واحد فقط من المستند في وقت واحد. إذا كنت تبحث عن أحد عناصر SAX ، فلن تتمكن من الوصول إلى عنصر آخر.
إليك أسهل طريقة لتحميل مستند XML بسرعة وإنشاء كائن مصغر باستخدام الوحدة النمطية xml.dom. يوفر كائن minidom طريقة محلل بسيطة تنشئ بسرعة شجرة DOM من ملف XML.
تستدعي العبارة النموذجية وظيفة التحليل (file [، parser]) الخاصة بالكائن minidom لتحليل ملف XML المعيّن بواسطة الملف في كائن شجرة DOM.
#!/usr/bin/python from xml.dom.minidom import parse import xml.dom.minidom # Open XML document using minidom parser DOMTree = xml.dom.minidom.parse("movies.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print "Root element : %s" % collection.getAttribute("shelf") # Get all the movies in the collection movies = collection.getElementsByTagName("movie") # Print detail of each movie. for movie in movies: print "*****Movie*****" if movie.hasAttribute("title"): print "Title: %s" % movie.getAttribute("title") type = movie.getElementsByTagName('type')[0] print "Type: %s" % type.childNodes[0].data format = movie.getElementsByTagName('format')[0] print "Format: %s" % format.childNodes[0].data rating = movie.getElementsByTagName('rating')[0] print "Rating: %s" % rating.childNodes[0].data description = movie.getElementsByTagName('description')[0] print "Description: %s" % description.childNodes[0].data
هذا من شأنه أن ينتج النتيجة التالية -
Root element : New Arrivals *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Rating: PG Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Rating: R Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Description: Viewable boredom
للحصول على تفاصيل كاملة حول وثائق DOM API ، يرجى الرجوع إلى Python DOM APIs القياسية.
التسميات: Python بايثون
<< الصفحة الرئيسية