Python解析器

5033 ワード

XMLとは?
XMLとは、拡張可能なタグ言語(eXtensible Markup Language)を意味し、標準的な汎用タグ言語のサブセットであり、電子ファイルをタグして構造性を持たせるタグ言語である.あなたは当駅を通じて学ぶことができます
XMLは、データを転送および格納するように設計されている.
XMLは、ドキュメントを多くの部品に分割し、これらの部品を識別する意味タグを定義するルールです.
メタタグ言語でもあり、特定の分野に関連する他の意味的、構造化されたタグ言語を定義するための構文言語を定義します.
XML構文
a)XMLには、次のstudentsがルート要素であるように、他のすべての要素の親要素であるルート要素が含まれている必要があります.
[html]  view plain
 copy
xml version="1.0" encoding="utf-8" ?>  
  
      
李明name>女性sex>        18age>  
        1.6height>  
        178score>  
    student>  
b)すべてのXML要素にクローズラベルが必要です!
c)XMLは正しくネストしなければならない
d)開始部:"1.0"encoding="utf-8">
e)ラベルペアが出現し、大文字と小文字を区別する
f)属性を持つことができて、1つのルートノードしかありません!!!
pythonによるXMLの解析
一般的なXMLプログラミングインタフェースにはDOMとSAXがあり、この2つのインタフェースはXMLファイルを処理する方法が異なり、もちろん使用場面も異なります.
pythonには、XML、SAX、DOM、ElementTreeの3つの方法があります.
1.SAX (simple API for XML )
python標準ライブラリにはSAX解析器が含まれており、SAXはイベント駆動モデルで、XMLを解析する過程で個々のイベントをトリガーし、ユーザー定義のコールバック関数を呼び出すことでXMLファイルを処理します.
2.DOM(Document Object Model)
XMLデータをメモリに1つのツリーに解析し、ツリーの操作によってXMLを操作します.
python SAXを使用してxmlを解析
SAXはイベント駆動に基づくAPIである.
SAX解析XMLドキュメントは、解析器とイベントプロセッサの2つの部分に関連しています.
解析器はXMLドキュメントを読み取り、要素の開始イベントや要素の終了イベントなどのイベントプロセッサにイベントを送信します.
イベントプロセッサは,イベントに対応して伝達されたXMLデータを処理する.
1、大型ファイルを処理する;
2、ファイルの一部のみ、またはファイルから特定の情報を取得するだけです.
3、自分のオブジェクトモデルを作りたいとき.
pythonでsax方式でxmlを処理するにはxmlを先に導入する.saxのparse関数、xmlもあります.sax.handlerのContentHandler.
xmlを使用します.dom解析xml
ファイルオブジェクトモデル(Document Object Model、略称DOM)は、W 3 C組織が推奨する拡張可能なスケーリング言語の処理のための標準的なプログラミングインターフェースである.
DOMの解析器は、XMLドキュメントを解析するときに、ドキュメント全体を一度に読み取り、ドキュメント内のすべての要素をメモリのツリー構造に保存します.その後、DOMが提供する異なる関数を利用して、ドキュメントの内容と構造を読み取りたり変更したりすることができます.また、変更した内容をxmlファイルに書き込むこともできます.
(1)    DOM  

[python] view plain copy
from xml.dom.minidom import parse               #             
class Student:                                  #           
    def __init__(self,name,sex,age):  
        self.name = name  
        self.sex = sex  
        self.age = age  
    def __str__(self):  
        return "  :{0}    :{1}    :{2}".format(self.name,self.sex,self.age)  
  
student1 = []                           #              
doc = parse("      .xml")  
root = doc.documentElement              #           
#print(root)  
students = root.getElementsByTagName("student")  
#print(students)  
for p in students:  
    student = Student(p.getElementsByTagName("name")[0].childNodes[0].data,p.getElementsByTagName("sex")[0].childNodes[0].data,p.getElementsByTagName("age")[0].childNodes[0].data)  
    student1.append(student)  
for p in student1:  
    print(p)  
(2)    SAX  

[python] view plain copy
from xml.sax import ContentHandler  
from xml.dom.minidom import parse  
  
class Student:  
    def __init__(self,name =None,sex = None,age = None):  
        self.name = name  
        self.sex = sex  
        self.age = age  
    def __str__(self):  
        return "  :{0}    :{1}    :{2}".format(self.name,self.sex,self.age)  
  
student1 = []  
class mysaxxml(ContentHandler):  
    def __init__(self):  
        self.tag=None                               #       ???  
        self.stu=None  
    def startDocument(self):  
        print("startdocument...")  
    def startElement(self, name, attrs):  
        self.tag = name  
        if name =="student":  
            self.stu = Student()  
    def characters(self, content):  
        if self.tag =="name":  
            self.stu.name=content  
        if self.tag =="sex":  
            self.stu.sex=content  
        if self.tag =="age":  
            self.stu.age=content  
    def endElement(self, name):  
        if name == "student":  
            student1.append(self.stu)  
            self.stu = None  
        self.tag = None                             #         self.tag = None  ??  
    def endDocument(self):  
        print("endDocument.......")  
sts = mysaxxml()  
parse("      .xml",sts)  
for p in student1:  
    print(p)  
(3)    ElementTree      
[python] view plain copy
from xml.etree.ElementTree import *  
  
class Student:  
    def __init__(self,name = None,sex = None,age = None):  
        self.name = name  
        self.sex = sex  
        self.age = age  
    def __str__(self):  
        return "  :{0}    :{1}    :{2}".format(self.name,self.sex,self.age)  
  
people = []  
root = parse("      .xml")  
student1 = root.findall("student")  
  
for p in student1:  
    student = Student()  
    student.name = p.find("name").text  
    student.sex = p.find("sex").text  
    student.age = p.find("age").text  
    people.append(student)  
for p in people:  
    print(p)