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