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方法創(chuàng)建一個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"): # 創(chuàng)建一個 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")
以上代碼執(zhí)行結果如下:
*****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
以上程序執(zhí)行結果如下:
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ツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

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

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