PythonでSAXAPIを使用してXMLを解析する
SAXは、イベント駆動型XML解析の標準インターフェースです。 SAXを使用してXMLを解析するには、通常、xml.sax.ContentHandlerをサブクラス化して独自のContentHandlerを作成する必要があります。
ContentHandlerは、XMLのフレーバーの特定のタグと属性を処理します。 ContentHandlerオブジェクトは、さまざまな解析イベントを処理するためのメソッドを提供します。所有するパーサーは、XMLファイルを解析するときにContentHandlerメソッドを呼び出します。
メソッドstartDocumentおよびendDocumentは、XMLファイルの開始時と終了時に呼び出されます。メソッドcharacters(text)は、パラメーターtextを介してXMLファイルの文字データを渡します。
ContentHandlerは、各要素の開始時と終了時に呼び出されます。パーサーが名前空間モードでない場合、メソッドstartElement(tag、attributes)およびendElement(tag)が呼び出されます。それ以外の場合は、対応するメソッドstartElementNSおよびendElementNSが呼び出されます。ここで、tagは要素タグであり、attributesはAttributesオブジェクトです。
先に進む前に理解しておくべき他の重要な方法は次のとおりです-
make_parserメソッド
次のメソッドは、新しいパーサーオブジェクトを作成し、それを返します。作成されるパーサーオブジェクトは、システムが最初に検出するパーサータイプになります。
xml.sax.make_parser( [parser_list] )
パラメータの詳細は次のとおりです-
- parser_list −使用するパーサーのリストで構成されるオプションの引数。すべてmake_parserメソッドを実装する必要があります。
解析メソッド
次のメソッドは、SAXパーサーを作成し、それを使用してドキュメントを解析します。
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
パラメータの詳細は次のとおりです-
- xmlfile −これは読み取るXMLファイルの名前です。
- コンテンツハンドラー −これはContentHandlerオブジェクトである必要があります。
- エラーハンドラー −指定する場合、errorhandlerはSAXErrorHandlerオブジェクトである必要があります。
parseStringメソッド
SAXパーサーを作成し、指定されたXML文字列を解析する方法がもう1つあります。 。
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
パラメータの詳細は次のとおりです-
- xmlstring −これは読み取るXML文字列の名前です。
- コンテンツハンドラー −これはContentHandlerオブジェクトである必要があります。
- エラーハンドラー −指定する場合、errorhandlerはSAXErrorHandlerオブジェクトである必要があります。
例
#!/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 = ""
# 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 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ドキュメントの詳細については、標準のPythonSAXAPIを参照してください。
-
Pythonでの継承
この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen
-
PythonでのXML解析?
Python XMLパーサーパーサーは、XMLファイルから有用な情報を読み取って抽出する最も簡単な方法の1つを提供します。この短いチュートリアルでは、Python ElementTree XML APIを使用してXMLファイルを解析し、XMLドキュメントを変更および作成する方法を説明します。 Python ElementTree APIは、XMLデータを抽出、解析、変換する最も簡単な方法の1つです。 それでは、ElementTreeを使用してPythonXMLパーサーの使用を開始しましょう。 例1 XMLファイルの作成 まず、要素とサブ要素を含む新しいXMLファイルを作成します。 #Im