Python
 Computer >> コンピューター >  >> プログラミング >> Python

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を参照してください。


  1. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen

  2. PythonでのXML解析?

    Python XMLパーサーパーサーは、XMLファイルから有用な情報を読み取って抽出する最も簡単な方法の1つを提供します。この短いチュートリアルでは、Python ElementTree XML APIを使用してXMLファイルを解析し、XMLドキュメントを変更および作成する方法を説明します。 Python ElementTree APIは、XMLデータを抽出、解析、変換する最も簡単な方法の1つです。 それでは、ElementTreeを使用してPythonXMLパーサーの使用を開始しましょう。 例1 XMLファイルの作成 まず、要素とサブ要素を含む新しいXMLファイルを作成します。 #Im