**XMLとは何ですか? ****
XMLは、標準の汎用マークアップ言語のサブセットであるeXtensible Markup Languageを指し、電子ドキュメントをマークして構造化するために使用されるマークアップ言語です。このサイトからXMLチュートリアルを学ぶことができます
XMLは、データを送信および保存するように設計されています。
XMLは、ドキュメントをパーツに分割し、これらのパーツを識別するセマンティックマークアップを定義する一連のルールです。
また、特定のフィールドに関連する他のセマンティックおよび構造化マークアップ言語を定義するために使用される構文言語を定義するメタマークアップ言語でもあります。
PythonによるXMLの解析
一般的なXMLプログラミングインターフェイスはDOMとSAXです。これら2つのインターフェイスは、さまざまな方法でXMLファイルを処理します。もちろん、さまざまな状況で使用されます。
Pythonには、XML、SAX、DOM、およびElementTreeを解析するための3つのメソッドがあります。
1. SAX (simple API for XML )
Python標準ライブラリにはSAXパーサーが含まれています。SAXはイベント駆動型モデルを使用して、XMLの解析およびユーザー定義のコールバック関数の呼び出しのプロセス中にイベントを1つずつトリガーすることにより、XMLファイルを処理します。
2. DOM(Document Object Model)
XMLデータをメモリ内のツリーに解析し、ツリーの操作を通じて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
PythonはSAXを使用してxmlを解析します
SAXはイベント駆動型APIです。
SAXを使用してXMLドキュメントを解析するには、パーサーとイベントハンドラーの2つの部分が必要です。
パーサーは、XMLドキュメントを読み取り、要素の開始イベントや要素の終了イベントなどのイベントをイベントハンドラーに送信する役割を果たします。
イベントハンドラは、イベントに応答し、渡されたXMLデータを処理する責任があります。
saxを使用してPythonでxmlを処理するには、最初にxml.saxにparse関数を導入し、xml.sax.handlerにContentHandlerを導入する必要があります。
ContentHandlerクラスメソッドの紹介
文字(コンテンツ)メソッド
いつ電話するか:
行から始めて、ラベルに出会う前に文字があり、コンテンツの値はこれらの文字列です。
あるラベルから、次のラベルに出会う前に文字があり、コンテンツの値はこれらの文字列です。
ラベルから、行末文字に遭遇する前に文字があり、コンテンツの値はこれらの文字列です。
タグは、開始タグまたは終了タグにすることができます。
startDocument()メソッド
ドキュメントの開始時に呼び出されます。
endDocument()メソッド
パーサーがドキュメントの最後に到達したときに呼び出されます。
startElement(name、attrs)メソッド
XML開始タグが検出されたときに呼び出されます。nameはタグの名前であり、attrsはタグの属性値ディクショナリです。
endElement(name)メソッド
**XML終了タグが検出されたときに呼び出されます。 ****
make_parserメソッド
次のメソッドは、新しいパーサーオブジェクトを作成して戻ります。
xml.sax.make_parser([parser_list])
パラメータの説明:
パーサー方式
次のメソッドは、SAXパーサーを作成し、xmlドキュメントを解析します。
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
パラメータの説明:
parseStringメソッド
parseStringメソッドは、XMLパーサーを作成し、xml文字列を解析します。
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
パラメータの説明:
PythonによるXMLインスタンスの解析
#! /usr/bin/python3
import xml.sax
classMovieHandler( xml.sax.ContentHandler ):
def __init__(self):
self.CurrentData =""
self.type =""
self.format =""
self.year =""
self.rating =""
self.stars =""
self.description =""
# 要素が呼び出しを開始します
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag =="movie":print("*****Movie*****")
title = attributes["title"]print("Title:", title)
# 要素終了呼び出し
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 =""
# 文字を読むときに呼び出されます
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__"):
# XMLReaderを作成する
parser = xml.sax.make_parser()
# 名前名を閉じる
parser.setFeature(xml.sax.handler.feature_namespaces,0)
# 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 SAXAPIを参照してください。
**xml.domを使用してxml **を解析します
ドキュメントオブジェクトモデル(DOM)は、W3C組織が推奨する拡張可能なマークアップ言語を処理するための標準プログラミングインターフェイスです。
DOMパーサーがXMLドキュメントを解析するとき、ドキュメント全体を一度に読み取り、ドキュメント内のすべての要素をメモリ内のツリー構造に格納します。次に、DOMが提供するさまざまな機能を使用して、ドキュメントを読み取ったり変更したりできます。変更したコンテンツをxmlファイルに書き込むこともできます。
pythonでは、xml.dom.minidomを使用してxmlファイルを解析します。例は次のとおりです。
#! /usr/bin/python3
from xml.dom.minidom import parse
import xml.dom.minidom
# minidomパーサーでXMLドキュメントを開きます
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):print("Root element : %s"% collection.getAttribute("shelf"))
# コレクション内のすべての映画を入手する
movies = collection.getElementsByTagName("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
完全なDOMAPIドキュメントについては、Python DOMAPIを参照してください。
上記は、PythonがXMLを解析する方法の詳細な内容です。PythonのXML解析の詳細については、ZaLou.Cnの他の関連記事に注意してください。
Recommended Posts