python XML解析
python XML解析
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 )
pyhton標準ライブラリにはSAX解析器が含まれており、SAXはイベント駆動モデルで、XMLを解析する過程で個々のイベントをトリガーし、ユーザー定義のコールバック関数を呼び出すことでXMLファイルを処理します.
2.DOM(Document Object Model)
XMLデータをメモリに1つのツリーに解析し、ツリーの操作によってXMLを操作します.
3.ElementTree(メタツリー)
ElementTreeは軽量級のDOMのようで、便利で友好的なAPIを持っています.コードの可用性がよく、速度が速く、消費メモリが少ない.
注意:DOMはXMLデータをメモリのツリーにマッピングする必要があるため、1つは比較的遅い、2つは比較的にメモリを消費するが、SAXはXMLファイルをストリーミングし、比較的速く、メモリを消費するのは少ないが、ユーザーがコールバック関数(handler)を実現する必要がある.
この章で使用するXMLインスタンスファイルmovies.xmlの内容は次のとおりです.
python SAXを使用してxmlを解析
SAXはイベント駆動に基づくAPIである.
SAX解析XMLドキュメントは、解析器とイベントプロセッサの2つの部分に関連しています.
解析器はXMLドキュメントを読み取り、要素の開始イベントや要素の終了イベントなどのイベントプロセッサにイベントを送信します.
イベントプロセッサは,イベントに対応して伝達されたXMLデータを処理する.1、大型ファイルを処理する. 2、ファイルの一部のみ、またはファイルから特定の情報を取得するだけです. 3、自分のオブジェクトモデルを作りたいとき.
pythonでsax方式でxmlを処理するにはxmlを先に導入する.saxのparse関数、xmlもあります.sax.handlerのContentHandler.
ContentHandlerクラスメソッドの紹介
charactersメソッド
呼び出しタイミング:
行からラベルに出会う前に文字が存在し、contentの値はこれらの文字列です.
1つのラベルから、次のラベルに出会う前に文字が存在し、contentの値はこれらの文字列です.
ラベルから、行の終端に遭遇する前に文字が存在し、contentの値はこれらの文字列です.
ラベルは、開始ラベルであってもよいし、終了ラベルであってもよい.
startDocument()メソッド
ドキュメントが起動されたときに呼び出されます.
endDocument()メソッド
解析器がドキュメントの最後に到達したときに呼び出されます.
startElement(name,attrs)メソッド
XML開始ラベルに遭遇したときに呼び出されます.nameはラベルの名前で、attrsはラベルの属性値辞書です.
endElementメソッド
XML終了ラベルに遭遇したときに呼び出されます.
make_parserメソッド
次の方法では、新しい解析オブジェクトを作成して返します.
パラメータの説明: parser_List-オプションパラメータ、解析器リスト parserメソッド
次の方法でSAX解析を作成し、xmlドキュメントを解析します.
パラメータの説明: xmlfile-xmlファイル名 contenthandler-ContentHandlerのオブジェクトである必要があります errorhandler-このパラメータを指定する場合、errorhandlerはSAX ErrorHandlerオブジェクト である必要があります.
parseStringメソッド
parseStringメソッドXML解析器を作成し、xml文字列を解析します.
パラメータの説明: xmlstring-xml文字列 contenthandler-ContentHandlerのオブジェクトである必要があります errorhandler-このパラメータを指定する場合、errorhandlerはSAX ErrorHandlerオブジェクト である必要があります.
Python解析XMLインスタンス
上記のコードの実行結果は次のとおりです.
完全なSAX APIドキュメントPython SAX APIsを参照してください
xmlを使用します.dom解析xml
ファイルオブジェクトモデル(Document Object Model、略称DOM)は、W 3 C組織が推奨する拡張可能なスケーリング言語の処理のための標準的なプログラミングインターフェースである.
DOMの解析器は、XMLドキュメントを解析するときに、ドキュメント全体を一度に読み取り、ドキュメント内のすべての要素をメモリのツリー構造に保存します.その後、DOMが提供する異なる関数を利用して、ドキュメントの内容と構造を読み取りたり変更したりすることができます.また、変更した内容をxmlファイルに書き込むこともできます.
pythonではxmlを使用します.dom.minidomはxmlファイルを解析します.例は次のとおりです.
以上のプログラムの実行結果は以下の通りです.
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 )
pyhton標準ライブラリにはSAX解析器が含まれており、SAXはイベント駆動モデルで、XMLを解析する過程で個々のイベントをトリガーし、ユーザー定義のコールバック関数を呼び出すことでXMLファイルを処理します.
2.DOM(Document Object Model)
XMLデータをメモリに1つのツリーに解析し、ツリーの操作によってXMLを操作します.
3.ElementTree(メタツリー)
ElementTreeは軽量級のDOMのようで、便利で友好的なAPIを持っています.コードの可用性がよく、速度が速く、消費メモリが少ない.
注意:DOMはXMLデータをメモリのツリーにマッピングする必要があるため、1つは比較的遅い、2つは比較的にメモリを消費するが、SAXはXMLファイルをストリーミングし、比較的速く、メモリを消費するのは少ないが、ユーザーがコールバック関数(handler)を実現する必要がある.
この章で使用するXMLインスタンスファイルmovies.xmlの内容は次のとおりです.
War, Thriller
DVD
2003
PG
10
Talk about a US-Japan war
Anime, Science Fiction
DVD
1989
R
8
A schientific fiction
Anime, Action
DVD
4
PG
10
Vash the Stampede!
Comedy
VHS
PG
2
Viewable boredom
python SAXを使用してxmlを解析
SAXはイベント駆動に基づくAPIである.
SAX解析XMLドキュメントは、解析器とイベントプロセッサの2つの部分に関連しています.
解析器はXMLドキュメントを読み取り、要素の開始イベントや要素の終了イベントなどのイベントプロセッサにイベントを送信します.
イベントプロセッサは,イベントに対応して伝達されたXMLデータを処理する.
pythonでsax方式でxmlを処理するにはxmlを先に導入する.saxのparse関数、xmlもあります.sax.handlerのContentHandler.
ContentHandlerクラスメソッドの紹介
charactersメソッド
呼び出しタイミング:
行からラベルに出会う前に文字が存在し、contentの値はこれらの文字列です.
1つのラベルから、次のラベルに出会う前に文字が存在し、contentの値はこれらの文字列です.
ラベルから、行の終端に遭遇する前に文字が存在し、contentの値はこれらの文字列です.
ラベルは、開始ラベルであってもよいし、終了ラベルであってもよい.
startDocument()メソッド
ドキュメントが起動されたときに呼び出されます.
endDocument()メソッド
解析器がドキュメントの最後に到達したときに呼び出されます.
startElement(name,attrs)メソッド
XML開始ラベルに遭遇したときに呼び出されます.nameはラベルの名前で、attrsはラベルの属性値辞書です.
endElementメソッド
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/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 = ""
#
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()
# turn off namepsaces
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 SAX APIsを参照してください
xmlを使用します.dom解析xml
ファイルオブジェクトモデル(Document Object Model、略称DOM)は、W 3 C組織が推奨する拡張可能なスケーリング言語の処理のための標準的なプログラミングインターフェースである.
DOMの解析器は、XMLドキュメントを解析するときに、ドキュメント全体を一度に読み取り、ドキュメント内のすべての要素をメモリのツリー構造に保存します.その後、DOMが提供する異なる関数を利用して、ドキュメントの内容と構造を読み取りたり変更したりすることができます.また、変更した内容をxmlファイルに書き込むこともできます.
pythonではxmlを使用します.dom.minidomはxmlファイルを解析します.例は次のとおりです.
#!/usr/bin/python
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