PythonでのXML解析の詳しい説明
XMLとは何ですか?
XML は、拡張可能なマークアップ言語 (eXtensible Markup Language) を指します。
XML はデータを送信および保存するように設計されています。
XML は、ドキュメントをコンポーネントに分割し、それらのコンポーネントを識別するセマンティック マークアップを定義する一連のルールです。
これはメタ マークアップ言語でもあります。つまり、特定のフィールドに関連する他のセマンティックおよび構造化マークアップ言語を定義するための構文言語を定義します。
pythonXMLの解析
一般的なXMLプログラミングインターフェースこれらの2つのインターフェースはDOMとSAXがあり、XMLファイルを異なる方法で処理し、当然使用シナリオも異なります。
python には、XML、SAX、DOM、および ElementTree を解析するための 3 つのメソッドがあります:
1.SAX (シンプルな API for XML )
Python 標準ライブラリには SAX パーサーが含まれており、SAX は event によって駆動されます モデル は、XML の解析プロセス中にイベントを 1 つずつトリガーし、ユーザー定義の コールバック関数 を呼び出すことによって、XML ファイルを処理します。
2.DOM (Document Object Model)
は、XML データをメモリ上のツリーに解析し、ツリー上で操作することで XML を操作します。
3.ElementTree (要素ツリー)
ElementTree は、便利でフレンドリーな API を備えた軽量 DOM のようなものです。コードは使いやすく、高速で、メモリ消費量が少なくなります。
注: DOM は XML データをメモリ内のツリーにマップする必要があるため、第一に比較的遅く、第二に、XML ファイルの SAX ストリーミング読み取りの方が高速でメモリ消費量が少なくなりますが、より多くのメモリを消費します。ユーザー実装のコールバック関数 (handler)。
この章で使用される XML サンプル ファイル movie.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 データを処理する役割を担います。
1. 大きなファイルを処理します。
2. ファイルの一部のみが必要、またはファイルの特定の情報のみが必要です。
3. 独自の オブジェクトモデルを作成したい場合。
sax を使用して Python で xml を処理するには、まず xml.sax に parse 関数を導入し、xml.sax.handler に ContentHandler を導入する必要があります。
ContentHandlerクラスのメソッド紹介
characters(content)メソッド
呼び出しタイミング:
ラベルに遭遇する前の行から始まり、文字があり、contentの値はこれらの文字列です。
あるラベルから次のラベルに出会うまでに文字があり、コンテンツの値はこれらの文字列です。
ラベルから、行終端記号に遭遇する前に文字があり、コンテンツの値はこれらの文字列です。
タグは開始タグまたは終了タグにすることができます。
startDocument()メソッド
は、ドキュメントの開始時に呼び出されます。
endDocument() メソッド
は、パーサーがドキュメントの終わりに到達すると呼び出されます。
startElement(name, attrs) メソッド
は、XML 開始タグが見つかったときに呼び出されます。name はタグの名前であり、attrs はタグの attributesvalue ディクショナリです。
endElement(name)メソッド
は、XML終了タグが見つかったときに呼び出されます。
make_parser メソッド
次のメソッドは、新しいパーサー オブジェクトを作成して返します。
xml.sax.make_parser( [parser_list] )
パラメータの説明:
parser_list - オプションのパラメータ、パーサーリスト
パーサーメソッド
次のメソッドは、SAX パーサーを作成し、XML ドキュメントを解析します:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
パラメーターの説明:
-
xmlfile - XML ファイル名
contenthandler - ContentHandler オブジェクトである必要があります
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
parseString方法
parseString方法创建一个XML解析器并解析xml字符串:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
参数说明:
xmlstring - xml字符串
contenthandler - 必须是一个ContentHandler的对象
errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
Python 解析XML实例
#!/usr/bin/python# -*- coding: UTF-8 -*-import xml.saxclass 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 BehindType: War, ThrillerFormat: DVDYear: 2003Rating: PGStars: 10Description: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDYear: 1989Rating: RStars: 8Description: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGStars: 10Description: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGStars: 2Description: Viewable boredom
使用xml.dom解析xml
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。
一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
python中用xml.dom.minidom来解析xml文件,实例如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-from xml.dom.minidom import parseimport xml.dom.minidom# 使用minidom解析器打开 XML 文档DOMTree = xml.dom.minidom.parse("movies.xml")collection = DOMTree.documentElementif 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 BehindType: War, ThrillerFormat: DVDRating: PGDescription: Talk about a US-Japan war*****Movie*****Title: TransformersType: Anime, Science FictionFormat: DVDRating: RDescription: A schientific fiction*****Movie*****Title: TrigunType: Anime, ActionFormat: DVDRating: PGDescription: Vash the Stampede!*****Movie*****Title: IshtarType: ComedyFormat: VHSRating: PGDescription: Viewable boredom
以上がPythonでのXML解析の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック







