پردازش و تفسیر فایل های XML با استفاده از توابع DOM

موسسه پایاپروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری پردازش و تفسیر فایل های داده داشته باشد.

 

 Document Object Model (DOM) یک رابط برنامه نویسی برای اسناد HTML و XML است. که این توابع ساختار منطقی اسناد و نحوه دسترسی و دستکاری یک سند را تعریف می کند.

این مقاله بر چگونگی تجزیه و تحلیل یک فایل XML داده شده و استخراج برخی از داده های مفید از آن به روشی ساختاریافته تمرکز دارد.

XML  چیست؟

XML: XML مخفف عبارت Extensible Markup Language است. برای ذخیره و انتقال داده هایی طراحی شده که هم برای انسان و هم توسط ماشین قابل خواندن باشد. به همین دلیل، اهداف طراحی XML بر سادگی، عمومیت و قابلیت استفاده در سراسر اینترنت تاکید دارد.

فایل XML می تواند مثلا یک فید RSS باشد.

RSS، اغلب به نام  Really Simple Syndicationاز خانواده ای از قالب های فید وب استاندارد برای انتشار اطلاعات به روز شده مکرر مانند ورودی های وبلاگ، سرفصل های اخبار، صدا، ویدئو استفاده می کند. RSS یک متن ساده با فرمت XML است.

ماژول xml.dom

ماژول Python مورد استفاده در این مقاله xml.dom نام دارد و بر روی استفاده از ماژول xml داخلی در پایتون برای تجزیه XML تمرکز دارد و تمرکز اصلی بر روی ElementTree XML API این ماژول خواهد بود.

مثال1:

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

پردازش XML با ای پی آی های DOM:

مثال2: پردازش XML با ای پی آی های DOM در پایتون ساده است. برای مثال، ما یک نمونه سند XML (sample.xml) به شکل زیر ایجاد کردیم:

<?”xml version=”1.0?>

<company>

    <name>GeeksForGeeks Company</name>        

    <“staff id=”1>        

        <name>Amar Pandey</name>                   

        <salary>8.5 LPA</salary>                  

    <staff/>

    <“staff id=”2>

        <name>Akbhar Khan</name>                

        <salary>6.5 LPA</salary>               

    <staff/>

    <“staff id=”3>

        <name>Anthony Walter</name>                 

        <salary>3.2 LPA</salary>                

    <staff/>        

<company/>

حالا  XML بالا را با پایتون پردازش و تجزیه می کنیم، که روند آن به صورت زیر خواهد بود

from xml.dom import minidom  

doc = minidom.parse(“sample.xml”)

 doc.getElementsByTagName returns the NodeList#

name = doc.getElementsByTagName(“name”)[0]

print(name.firstChild.data)

  

staffs = doc.getElementsByTagName(“staff”)

:for staff in staffs

        staff_id = staff.getAttribute(“id”)              

        name = staff.getElementsByTagName(“name”)[0]             

        salary = staff.getElementsByTagName(“salary”)[0]            

      %  “print(“id:% s, name:% s, salary:% s           

              ((staff_id, name.firstChild.data, salary.firstChild.data)                   

 

خروجی:

GeeksForGeeks Company

id:1, name: Amar Pandey, salary:8.5 LPA

id:2, name: Akbar Khan, salary:6.5 LPA

id:3, name: Anthony Walter, salary:3.2 LPA

پردازش XML با استفاده از تابع تعریف شده:

مثال 3: همین کار را می توان با استفاده از یک تابع تعریف شده توسط کاربر همانطور که در کد زیر نشان داده شده است انجام داد:

from xml.dom import minidom  

doc = minidom.parse(“sample.xml”)

   user-defined function#

:def getNodeText(node)

  

    nodelist = node.childNodes

  [] =result  

:for node in nodelist

        :if node.nodeType == node.TEXT_NODE            

            result.append(node.data)                

    return ”.join(result)        

name = doc.getElementsByTagName(“name”)[0]

print(“Company Name : % s \n” % getNodeText(name))  

staffs = doc.getElementsByTagName(“staff”)

:for staff in staffs

        staff_id = staff.getAttribute(“id”)                

        name = staff.getElementsByTagName(“name”)[0]              

        salary = staff.getElementsByTagName(“salary”)[0]            

    %   ” print(“id:% s, name:% s, salary:% s           

              (staff_id, getNodeText(name), getNodeText(salary)))             

 

خروجی:

Company Name : GeeksForGeeks Company

 id:1, name:Amar Pandey, salary:8.5 LPA

id:2, name:Akbhar Khan, salary:6.5 LPA

id:3, name:Anthony Walter, salary:3.2 LPA

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این زمینه را پر کنید
این زمینه را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

6 − 3 =

سفارش پروژه