XMLとは何ですか?
XML は eXtensible Markup Language を指します。 このサイトを通じて XML チュートリアルを学ぶことができます
XML はデータを送信および保存するように設計されています。
XML は、ドキュメントをコンポーネントに分割し、それらのコンポーネントを識別するセマンティック マークアップを定義する一連のルールです。
これはメタ マークアップ言語でもあります。つまり、特定のフィールドに関連する他のセマンティックおよび構造化マークアップ言語を定義するための構文言語を定義します。
Python による XML の解析
一般的な XML プログラミング インターフェイスには DOM と SAX があり、これら 2 つのインターフェイスは XML ファイルを異なる方法で処理し、当然、使用シナリオも異なります。
Python には、XML、SAX、DOM、および ElementTree を解析するための 3 つのメソッドがあります:
1.SAX (XML 用の単純な API)
pyhton 標準ライブラリには、SAX パーサーがイベント駆動型モデルを使用して XML を解析します。処理 イベントを 1 つずつトリガーし、ユーザー定義のコールバック関数を呼び出して XML ファイルを処理します。
2.DOM(Document Object Model)
は、XMLデータをメモリ上のツリーに解析し、ツリー上で操作することでXMLを操作します。
3.ElementTree (要素ツリー)
ElementTree は、便利でフレンドリーな API を備えた軽量 DOM のようなものです。コードは使いやすく、高速で、メモリ消費量が少なくなります。
注: DOM は XML データをメモリ内のツリーにマップする必要があるため、比較的遅く、より多くのメモリを消費します。XML ファイルの SAX ストリーミング読み取りの方が高速で、使用するメモリも少なくなりますが、ユーザーはコールバック関数を実装する必要があります。 (ハンドラ)。
この章で使用する XML サンプル ファイル movie.xml の内容は次のとおりです。
<コレクション棚="新着商品">
<映画タイトル="背後の敵">
<タイプ>戦争、スリラータイプ>
<フォーマット>DVDフォーマット>
<年>2003年>
<評価>PG評価>
10
映画>
<映画タイトル="トランスフォーマー">
<評価>R評価>
<星>8<星&Gt ;
< ;description>科学小説
<フォーマット> /フォーマット>
<エピソード>gt;/エピソード>
<評価>PG評価>
<星>10星>
<説明>ヴァッシュ・ザ・スタンピード!
< ;評価 >PG< /評価>
<星>2星>
<説明>閲覧可能な退屈説明>
映画>
コレクション>
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 はタグの属性値ディクショナリです。
endElement(name) メソッド
は、XML 終了タグが見つかったときに呼び出されます。
make_parser メソッド
次のメソッドは、新しいパーサー オブジェクトを作成し、それを返します。
xml.sax.make_parser([parser_list])
パラメータの説明:
parser_list - オプションのパラメータ、パーサーリスト
parserメソッド
次のメソッドはSAXパーサーデバイスを作成し、解析するXMLドキュメント:
xml.sax.parse(xmlfile、contenthandler [、errorhandler])
parameter説明:
xmlfile -xmlファイル名
contenthandler-contenthan dlerオブジェクトでなければなりません
errorhandler - このパラメーターが指定されている場合、errorhandler は SAX ErrorHandler オブジェクトである必要があります。
parseString メソッド
parseString メソッドは、XML パーサーを作成し、XML 文字列を解析します。
xml.sax.parseString(xmlstring, contenthandler [ 、errorhandler])
パラメーターの説明:
xmlstring - XML 文字列
contenthandler - ContentHandler オブジェクトである必要があります
errorhandler - このパラメーターが指定されている場合、errorhandler は SAX ErrorHandler オブジェクトである必要があります
Python Parse XMLインスタンス
#!/usr/bin/python
import xml.sax
class MovieHandler( xml.sax.ContentHandler ):
def __init__(self):
self .CurrentData = ""
self.type .
場合tag == "Movie":print "*****"emovie **** currentdata == "type":currentdata == "year":t印刷 "start:"、self.starself seld.currentdata == "説明": "" "、self.descriptself.currentdata ="
defcharacters(self, content): if self.CurrentData == "type": self.type = content elif self.CurrentData == "format":
self.format = content
elif CurrentData == 「年」:
self.year = content
elif self.CurrentData == 「評価」:
self.評価 = コンテンツ
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData == "description":
self.description = content
if ( __name__ == "__main __"):
# 创建一 XMLReader
parser = xml.sax.make_parser()
# namepsacesをオフにする
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写 ContextHandler
Handler = MovieHandler ()
parser.setContentHandler( Handler )
parser.parse("movies.xml")
以上代码执行结果如下:
*****映画** ***
タイトル: 背後の敵
タイプ: 戦争, スリラー
形式: DVD
年: 2003
評価: PG
スター: 10
説明: 日米戦争について話します
* ****映画*****
タイトル: トランスフォーマー
タイプ: アニメ, サイエンス フィクション
形式: DVD
年: 1989
評価: R
スター: 8
説明: 科学フィクション
*****映画*****
タイトル: トライガン
タイプ: アニメ, アクション
フォーマット: DVD
評価: PG
スター: 10
説明: ヴァッシュ・ザ・スタンピード!
*****映画*****
タイトル: イシュタル
タイプ: コメディ
フォーマット: VHS
評価: PG
スター: 2
説明: 視聴可能な退屈
完整ったSAX API 文档蘅Python SAX API
は、xml.dom を解析する xml
文件モデルオブジェクト (Document Object Model、DOM と呼ばれる) を使用し、W3C 組織推論の拡張可能な処理の標準プロセス インターフェイスです。ドム解析器は、XML 文書を解析するときに、文書を一次的に取得し、文書内のすべての要素が保存されている 1 つの構造領域を保持し、その後、DOM が提供するさまざまな関数を利用して文書の内容を取得または変更できます。
Python では、xml.dom.minidom を使用して xml ファイルを解析します。例:
#!/usr/bin/pythonfrom xml.dom.minidom import parseimport xml.dom.minidom # ミニダム解析器打开 XML 文档DOMTree = xml.dom.minidom.parse("movies.xml")コレクション= DOMTree.documentElementif collection.hasAttribute("shelf"): print "ルート要素 : %s" % collection.getAttribute("shelf") # 集合中获取すべての映画映画 = collection.getElementsByTagName("movie") # 印打每部电影の详细情報for movie in movie: print "*****Movie*****" if movie.hasAttribut e( "title"): print "タイトル: %s" % movie.getAttribute("title") type = movie.getElementsByTagName('type')[0] print "タイプ: %s" % type.childNodes[0].data format = movie.getElementsByTagName('format')[0] print "Format: %s" % format.childNodes[0].data 評価 = movie.getElementsByTagName('評価')[0] print "評価: %s" % ratings.childNodes[0].data description = movie.getElementsByTagName('description')[0] print "説明: %s" % description .childNodes[0].data
上記プログラムの実行結果は以下の通りです:
ルート要素: 新着
*****映画*****
タイトル: 背後の敵
タイプ: 戦争、スリラー
フォーマット: DVD
Rating : PG
Description: 日米戦争について語る
*****映画*****
タイトル: トランスフォーマー
タイプ: アニメ、サイエンスフィクション
フォーマット: DVD
評価: R
説明: 科学フィクション
*****映画*****
タイトル: トライガン
タイプ: アニメ、アクション
フォーマット: DVD
評価: PG
説明:ヴァッシュ・ザ・スタンピード!
*****映画*****
タイトル: イシュタル
タイプ: コメディ
フォーマット: VHS
評価: PG
説明: 視聴可能な退屈