آموزش پردازش XML در برنامه نویسی پایتون ۳

3 سال پیش
آموزش پردازش XML در برنامه نویسی پایتون 3

آموزش پردازش XML در برنامه نویسی پایتون ۳

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش پردازش XML در برنامه نویسی پایتون ۳ خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون

XML یک زبان متن باز و قابل حمل است که به برنامه نویسان اجازه می دهد بدون توجه به سیستم عامل و/یا زبان توسعه، برنامه هایی را توسعه دهند که توسط سایر برنامه ها قابل خواندن باشد.

XML چیست؟

زبان نشانه گذاری توسعه پذیر (XML) یک زبان نشانه گذاری بسیار شبیه به HTML یا SGML است. این توسط کنسرسیوم وب جهانی توصیه شده و به عنوان یک استاندارد باز در دسترس است.

XML برای ردیابی مقادیر کوچک تا متوسط ​​داده بدون نیاز به ستون فقرات مبتنی بر SQL بسیار مفید است.

XML Parser Architectures و APIs

کتابخانه استاندارد پایتون مجموعه ای کمینه اما مفید از رابط ها را برای کار با XML فراهم می کند.

دو پایه ای ترین و پرکاربردترین API برای داده های XML، رابط های SAX و DOM هستند.

  • API ساده برای XML (SAX) – در اینجا، شما برای رویدادهای مورد علاقه تماس‌های برگشتی را ثبت می‌کنید و سپس به تجزیه‌کننده اجازه می‌دهید تا از طریق سند ادامه دهد. این زمانی مفید است که اسناد شما بزرگ هستند یا محدودیت حافظه دارید، فایل را با خواندن آن از روی دیسک تجزیه می کند و کل فایل هرگز در حافظه ذخیره نمی شود.
  • Document Object Model (DOM) API – این یک توصیه کنسرسیوم وب جهانی است که در آن کل فایل در حافظه خوانده می شود و در یک فرم سلسله مراتبی (مبتنی بر درخت) ذخیره می شود تا تمام ویژگی های یک سند XML را نشان دهد.

واضح است که SAX هنگام کار با فایل های بزرگ نمی تواند اطلاعات را به سرعت DOM پردازش کند. از سوی دیگر، استفاده انحصاری از DOM واقعاً می تواند منابع شما را از بین ببرد، به خصوص اگر در بسیاری از فایل های کوچک استفاده شود.

SAX فقط خواندنی است، در حالی که DOM اجازه تغییرات در فایل XML را می دهد. از آنجایی که این دو API مختلف به معنای واقعی کلمه مکمل یکدیگر هستند، دلیلی وجود ندارد که نتوانید از هر دو آنها برای پروژه های بزرگ استفاده کنید.

برای همه نمونه‌های کد XML، اجازه دهید از یک فایل XML ساده movies.xml به عنوان ورودی استفاده کنیم –

<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
   <movie title = "Trigun">
   <type>Anime, Action</type>
   <format>DVD</format>
   <episodes>4</episodes>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Vash the Stampede!</description>
</movie>
<movie title = "Ishtar">
   <type>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

 

SAX یک رابط استاندارد برای تجزیه XML مبتنی بر رویداد است. تجزیه XML با SAX عموماً مستلزم ایجاد ContentHandler خود با زیر کلاس بندی xml.sax.ContentHandler است.

ContentHandler شما برچسب ها و ویژگی های خاص طعم(های) XML شما را کنترل می کند. یک شی ContentHandler روش هایی را برای مدیریت رویدادهای تجزیه مختلف ارائه می دهد. تجزیه کننده مالک آن با تجزیه فایل XML متدهای ContentHandler را فراخوانی می کند.

متدهای startDocument و endDocument در ابتدا و انتهای فایل XML فراخوانی می شوند. کاراکترهای متد (متن) داده های کاراکتر فایل XML از طریق متن پارامتر ارسال می شود.

ContentHandler در ابتدا و انتهای هر عنصر فراخوانی می شود. اگر تجزیه کننده در حالت فضای نام نباشد، متدهای startElement(tag، ویژگی ها) و endElement(tag) فراخوانی می شوند. در غیر این صورت متدهای مربوطه startElementNS و endElementNS فراخوانی می شوند. در اینجا، تگ تگ عنصر است و ویژگی ها یک شیء Attributes است.

در اینجا روشهای مهم دیگری برای درک قبل از ادامه وجود دارد

روش make_parser

متد زیر یک شی تجزیه کننده جدید ایجاد می کند و آن را برمی گرداند. شی تجزیه کننده ایجاد شده از اولین نوع تجزیه کننده خواهد بود که سیستم می یابد.

xml.sax.make_parser( [parser_list] )

 

در اینجا جزئیات پارامترها آمده است –

parser_list – آرگومان اختیاری متشکل از لیستی از تجزیه کننده ها برای استفاده که همگی باید متد make_parser را پیاده سازی کنند.

روش parser

روش زیر یک تجزیه کننده SAX ایجاد می کند و از آن برای تجزیه یک سند استفاده می کند.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

 

در اینجا جزئیات پارامترها آمده است –

  • xmlfile – این نام فایل XML برای خواندن است.
  • contenthandler – این باید یک شی ContentHandler باشد.
  • errorhandler – اگر مشخص شده باشد، errorhandler باید یک شی SAX ErrorHandler باشد.

روش parseString

یک روش دیگر برای ایجاد تجزیه کننده SAX و تجزیه رشته XML مشخص شده وجود دارد.

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

 

در اینجا جزئیات پارامترها آمده است –

  • xmlstring – این نام رشته XML برای خواندن است.
  • contenthandler – این باید یک شی ContentHandler باشد.
  • errorhandler – اگر مشخص شده باشد، errorhandler باید یک شی SAX ErrorHandler باشد.

مثال

#!/usr/bin/python3

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 scientific 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

 

 

تجزیه XML با API های DOM

Document Object Model (“DOM”) یک API بین زبانی از کنسرسیوم جهانی وب (W3C) برای دسترسی و اصلاح اسناد XML است.

DOM برای برنامه های کاربردی با دسترسی تصادفی بسیار مفید است. SAX فقط به شما اجازه می دهد یک بیت از سند را در یک زمان مشاهده کنید. اگر به یک عنصر SAX نگاه می کنید، به دیگری دسترسی ندارید.

در اینجا ساده ترین راه برای بارگذاری سریع یک سند XML و ایجاد یک شی minidom با استفاده از ماژول xml.dom وجود دارد. شی minidom یک روش تجزیه کننده ساده ارائه می دهد که به سرعت یک درخت DOM از فایل XML ایجاد می کند.

عبارت نمونه تابع parse( file [,parser] ) شی minidom را برای تجزیه فایل XML که توسط فایل به یک شی درختی DOM تعیین شده است فراخوانی می کند.

 

مثال

#!/usr/bin/python3

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)
Output

 

این نتیجه زیر را ایجاد می کند –

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 scientific 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

 

منبع.

 

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون ۳

  1. آموزش برنامه نویسی پایتون ۳
  2. آموزش موارد جدید در برنامه نویسی پایتون ۳
  3. آموزش مرور کلی برنامه نویسی پایتون ۳
  4. آموزش راه اندازی محیط برنامه نویسی پایتون ۳
  5. آموزش نحو در برنامه نویسی پایتون ۳
  6. آموزش انواع متغیرها در برنامه نویسی پایتون ۳
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون ۳
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون ۳
  9.  آموزش حلقه ها در برنامه نویسی پایتون ۳
  10. آموزش اعداد در برنامه نویسی پایتون ۳
  11. آموزش رشته ها در برنامه نویسی پایتون ۳
  12.  آموزش لیست ها در برنامه نویسی پایتون ۳
  13.  آموزش تاپل ها در برنامه نویسی پایتون ۳
  14. آموزش دیکشنری در برنامه نویسی پایتون ۳
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون ۳
  16.  آموزش توابع در برنامه نویسی پایتون ۳
  17. آموزش ماژول ها در برنامه نویسی پایتون ۳
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون ۳
  19. آموزش مدیریت استثنا در برنامه نویسی پایتون ۳
  20. آموزش شی گرایی در برنامه نویسی پایتون ۳
  21.  آموزش عبارات منظم در برنامه نویسی پایتون ۳
  22. آموزش CGI در برنامه نویسی پایتون ۳
  23.  آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون ۳
  24.  آموزش برنامه نویسی شبکه در برنامه نویسی پایتون ۳
  25. آموزش ارسال ایمیل با استفاده از SMTP در برنامه نویسی پایتون ۳
  26.  آموزش برنامه نویسی چند رشته ای در برنامه نویسی پایتون ۳
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه