Skip to content

Python XML

บทความนี้จะพาผู้อ่านไปเรียนรู้การเขียนโปรแกรม Python กับ XML กันครับ

โดยไลบรารีที่จะเรียกใช้ในบทความนี้คือ xml.etree.ElementTree ครับ
XML คืออะไร
ย่อมาจาก XML: Extensible Markup Language เป็นภาษาหนึ่งบนคอมพิวเตอร์ที่เน้นส่วนที่เป็นข้อมูล เป็นภาษามาร์กอัปขยายได้ นิยมใช้ในการแลกเปลี่ยนข้อมูลผ่านอินเทอร์เน็ต และเป็นมาตรฐานของ W3C
โครงสร้าง XML
โครงสร้าง XML ประกอบไปด้วย ส่วนหัว xml , ชื่อแท็ก (Element) และชื่อแอตทิบิวต์ (Attribute)
ส่วนหัว
เป็นการระบุว่าเป็นเอกสาร XML โดยขึ้นอยู่กับมาร์กอัปที่จะใช้ เช่น

<?xml version="1.0"?> 

ชื่อแท็ก (Element)

ประกอบไปด้วย แท็กเปิดและปิด
ตัวอย่างเช่น

<data></data>

ชื่อแอตทิบิวต์ (Attribute)

ประกอบไปด้วย แท็กเปิดและปิดเหมือนกันแต่มีรายละเอียดขึ้นมา โดยจะบอกแอตทิบิวต์ของชื่อแท็กนั้น ๆ
ตัวอย่างเช่น

<home name="Ton" />

หรือ

<home name="Ton">home</home>

ตัวอย่างไฟล์ XML

<?xml version="1.0"?>
<data updated="yes">

	<home>
		<home name="Ton">1</home>
		<home name="Tan">2</home>
	</home>
</data>

สร้างไฟล์ XML บนภาษา Python

ใช้ไลบรารี xml.etree.ElementTree ในการเขียนไฟล์ xml โดยมีคำสั่งที่ควรรู้ต่อไปนี้ครับ

  • Element() เป็นคำสั่งสำหรับประกาศ Element
  • SubElement(Element, SubElement , Attribute) เป็นคำสั่งสำหรับเพิ่ม Element ย่อยหรือเพิ่ม Attribute ให้กับ Element ย่อย
  • text เพิ่มข้อมูลเข้าไปยัง Attribute
  • set(name, Attribute) ปรับแต่ง Attribute และเพิ่ม Attribute ให้กับ Element

โค้ดการทำงาน

from xml.etree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement

# <data/>
data = Element('data') # ประกาศ Element
data.set('updated', 'yes') #ปรับแต่ง Attribute และเพิ่ม Attribute ให้กับ Element

# <data><home/>
home = SubElement(data, 'home') #เพิ่ม Element ย่อย

# <data><home><home/>
ton = SubElement(home, 'home', name='Ton') #เพิ่ม Attribute ให้กับ Element
ton.text = '1'  # เพิ่มข้อมูลเข้าไปยัง Attribute
tan = SubElement(home, 'home', name='Tan') #เพิ่ม Attribute ให้กับ Element
tan.text = '2' # เพิ่มข้อมูลเข้าไปยัง Attribute

output_file = open('data.xml', 'w') #สร้างไฟล์ data.xml
output_file.write('<?xml version="1.0"?>') #เพิ่มส่วนหัว xml
output_file.write(ElementTree.tostring(data).decode('utf-8')) #เขียนไฟล์ xml จากข้อมูลที่กำหนด โดยข้อมูลที่ได้จะเป็น  bytes ต้องแปลงให้เป็น str ด้วย decode
output_file.close()

ผลลัพธ์

<?xml version="1.0"?><data updated="yes"><home><home name="Ton">1</home><home name="Tan">2</home></home></data>

Parse XML Python

หลังจากสร้างไฟล์ XML กันไปแล้ว คราวนี้เราจะไป Parse XML ด้วย Python กันครับ โดยใช้ไลบรารี xml.etree.ElementTree ในการ Parse XM โดยมีคำสั่งที่ใช้งานบ่อย ๆ ดังนี้

  • parse(source) ดึงไฟล์ source เข้ามาเพื่อทำการ parse
  • getroot() คืนค่า root element
  • tag ดึง Element ออกมา
  • attrib ดึง Attribute ออกมา
  • text แสดงข้อมูลที่อยู่ใน Element
  • find() , findall() ค้นหาข้อมูล

ไฟล์ data.xml

<?xml version="1.0"?>
<data updated="yes">

	<home>
		<home name="Ton">1</home>
		<home name="Tan">2</home>
	</home>
</data>

ไฟล์ Python

import xml.etree.ElementTree as ET
tree = ET.parse('data.xml') #ดึงไฟล์ data.xml เข้ามา
root = tree.getroot()
home = root.find('home')
print(root.tag)
print(root.attrib)
print(root[0][0].text)
print(root[0][1].text)
for home in root.findall( 'home/home' ):
    print(home.attrib['name'])

ผลลัพธ์
data
{'updated': 'yes'}
1
2
Ton
Tan

โมดูล lxml

โมดูล lxml ป็นโมดูลใน Python โมดูลหนึ่งสำหรับงานประมวลผล XML ไม่ว่าจะเป็นการสร้าง XML หรือ Parse XML สามารถเขียนคำสั่งการทำงานได้ง่ายกว่าใช้ไลบรารีของ Python ครับ

  • รวม libxml2/libxslt กับ ElementTree API มาในตัว ทำให้สนับสนุนทั้ง XPath, RelaxNG, XML Schema, XSLT, C14N และอื่น ๆ อีกมากมาย
  • ใช้ BSD license
  • สนับสนุนทั้ง Python 2 , Python 3

โหลดโมดูล lxml ได้ที่ pypi.python.org/pypi/lxml/ หรือใช้ pip โดยใช้คำสั่ง

pip install lxml

สำหรับผู้ใช้ Windows สามารถโหลดไฟล์ whl มาติดตั้งได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml ครับ
ตัอย่างการใช้งาน
ไฟล์ data.xml

<?xml version="1.0"?>
<data updated="yes">

	<home>
		<home name="Ton">1</home>
		<home name="Tan">2</home>
	</home>
</data>

ไฟล์ Python ทำการ Parse XML โดยใช้ lxml

from lxml import etree

tree = etree.parse('data.xml') #ไฟล์ data.xml

for data in tree.xpath('//home'):
    print(data.attrib)
    for sf in data.getchildren():
        print(sf.text)

อ่านเอกสารการใช้งาน lxml ได้ที่ lxml.de
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

Published on Categories Python Standard Library, web-developer, web-frameworkTags

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

1 thought on “Python XML

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *