1. 程式人生 > >xml檔案介紹及解析

xml檔案介紹及解析

什麼是xml
XML 指可擴充套件標記語言(eXtensible Markup Language)。
XML 被設計用來傳輸和儲存資料。
XML是一套定義語義標記的規則,這些標記將文件分成許多部件並對這些部件加以標識。
它也是元標記語言,即定義了用於定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。

要注意xml語法規範:
1.標籤成對出現
2.區分大小寫
3.標籤要正確巢狀
4.開始部分必須是

<?xml version="1.0" encoding="utf-8"?>
#xml用什麼寫都行 要是出現亂碼 把utf-8換成gbk

5.只能有一個根節點
6.節點可以有屬性

DTD(Document Type Definition):約束XML檔案的節點 通俗的理解是規定我們xml檔案該怎麼樣去寫

<!DOCTYPE students [                       # students是根節點
        <!ELEMENT students (student+)>     # +代表可以一個或者多個
        <!ELEMENT student (name+,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)> <!ATTLIST student id CDATA #REQUIRED> # ATTLIST屬性的意思 CDATA是純文字的意思 # student節點有屬性屬性名字叫id,屬性的值是純文字 ]> #REQUIRED(必需的),#IMPLIED(不是必需的),#FIXED(屬性值是固定的)

例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students [
        <!ELEMENT students (student+)>
        <!ELEMENT student (name+,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student id CDATA #REQUIRED>
        ]>
<students> <student id="1"> <name>小明</name> <name>小李</name> <age>18</age> <sex></sex> </student> <student id="2"> <name>小紅</name> <name>小每</name> <age>16</age> <sex></sex> </student> </students>

xml解析
1.dom(文件物件模型) :把解析的xml整個載入到記憶體,組織成object樹。常用的解析方式

2.sax:事件驅動式解析,不會在記憶體中載入整個文件,只會根據自己編寫的事件儲存資料。
3.ElementTree解析:ElementTree就像一個輕量級的DOM,具有方便友好的API。程式碼可用性好,速度快,消耗記憶體少。


通過dom進行解析

from xml.dom.minidom import parse
class Student():
    def __init__(self,name=None,age=None,sex=None,id=None):
        self.name=name
        self.age=age
        self.sex=sex
        self.id=id
    def __repr__(self):
        if len(self.name.encode("utf-8"))<=8:
            return self.id+"\t"+self.name+'\t'+self.age+'\t'+self.sex
        else:
            return self.id+"\t"+self.name+'\t\t'+self.age+'\t'+self.sex
doom = parse("lianxi.xml")
list1=[]
class DomParse:
    def __init__(self):
        self.stu=None
    def text(self):
        students = doom.getElementsByTagName("student")
        for stu in students:
            self.stu = Student()
            self.stu.name=stu.getElementsByTagName("name")[0].childNodes[0].data
            self.stu.age=stu.getElementsByTagName("age")[0].childNodes[0].data
            self.stu.sex=stu.getElementsByTagName("sex")[0].childNodes[0].data
            self.stu.id=stu.getAttribute("id")
            list1.append(self.stu)
        for i in list1:
            print(i)
a=DomParse()
a.text()

通過sax進行解析

from xml.sax import parse
from xml.sax.handler import ContentHandler
class Student:
    def __init__(self,id=None,name=None,age=None,sex=None):
        self.id=id
        self.name=name
        self.age=age
        self.sex=sex
    def __repr__(self):
        if len(self.name.encode("utf-8"))<=8:
            return self.id+"\t"+self.name+'\t\t'+self.age+'\t'+self.sex
        else:
            return self.id + "\t" + self.name + '\t' + self.age + '\t' + self.sex

stuList=[]
class SaxParser(ContentHandler):
    def __init__(self,name=None):
        self.name=name
        self.stu=None
    # def startDocument(self):
    #     print("starDocument.....")
    # def endDocument(self):
    #     print("endDocument.....")
    def startElement(self, name, attrs):
        if name=="student":
            self.stu=Student()
            self.stu.id=attrs["id"]
        self.name=name
    def characters(self, content):
        if self.name=="name":
            self.stu.name=content
        elif self.name=="age":
            self.stu.age=content
        elif self.name=="sex":
            self.stu.sex=content
    def endElement(self, name):
        if name=="student":
            stuList.append(self.stu)
        self.name=None


parse("lianxi.xml",SaxParser())
for s in stuList:
    print(s)

通過ElementTree進行解析

try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET


class Student:
    def __init__(self, id=None, name=None, age=None, sex=None):
        self.id = id
        self.name = name
        self.age = age
        self.sex = sex

    def __repr__(self):
        if len(self.name.encode("utf-8")) <= 8:
            return self.id + "\t" + self.name + '\t\t' + self.age + '\t' + self.sex
        else:
            return self.id + "\t" + self.name + '\t' + self.age + '\t' + self.sex


stuList = []


def text1():
    tree = ET.parse("lianxi.xml")
    students = tree.findall("student")
    for stu in students:
        student = Student()
        student.id = stu.attrib['id']
        children = stu.getchildren()
        student.name = children[0].text
        student.age = children[1].text
        student.sex = children[2].text
        stuList.append(student)



text1()
for i in stuList:
    print(i)

相關推薦

xml檔案介紹解析

什麼是xml XML 指可擴充套件標記語言(eXtensible Markup Language)。 XML 被設計用來傳輸和儲存資料。 XML是一套定義語義標記的規則,這些標記將文件分成許多部件並對這些部件加以標識。 它也是元標記語言,即定義了用於定

xml檔案的sax解析(增刪改查)

  crud(增刪改查): c:creat r:retrieve u:update d:delete 以下筆記來自於韓順平老師的講解。 現在是用java來操作。 第一步:新建java工程。file-new-Java Project,輸入工程的名字,點選finish. 第二步:放

SSM 生成mapper中xml檔案:未能解析對映資源:“檔案巢狀異常

錯誤日記我就網上隨便找個貼著: 錯誤一: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path res

Android-通過網路獲取xml檔案使用pull解析得到伺服器中的資訊(新聞客戶端)

通過網路獲取xml檔案,使用pull解析該檔案得到伺服器中的資訊; demo中使用了一個開源的圖片載入包,故上傳原始碼方便檢視; 效果圖: 步驟: 1.連線伺服器獲取xml檔案; 2.使用pull解析xml檔案存入實體物件中; 3.解析後將實體物件存入List集合中;

MySQL資料檔案介紹存放位置

MySQL的每個資料庫都對應存放在一個與資料庫同名的資料夾中,MySQL資料庫檔案包括MySQL(server)所建資料庫檔案和MySQL(server)所用儲存引擎建立的資料庫檔案。 1、MySQL(server)建立並管理的資料庫檔案: .frm檔案:儲存資料表的框架結構,檔名與表名相同,每個表對應一個

Apache Camel 中camel配置檔案引入其他xml檔案介紹--將camel配置檔案拆分後並引用

1、rest 可以在新檔案中用<restContext/>標籤 例如:需要匯入的檔案myCoolRests.xml,內容為 <restContext id="myCoolRest" xmlns="http://camel.apache.org/schema

Java class 檔案結構解析

java檔案經過編譯之後就可以形成class檔案。簡而言之,java檔案是我們自己書寫的檔案,也是給我們看的,而class檔案則是給VM看的。但是我們用notepad檢視class檔案時,卻發現那是一串二進位制的檔案。那麼class檔案到底是些啥東西呢? 本質

關於ANT-build.xml檔案介紹和部分命令使用

Ant的優點 Ant是Apache軟體基金會JAKARTA目錄中的一個子專案,它有以下的優點。跨平臺性。Ant是存Java語言編寫的,所示具有很好的跨平臺性。操作簡單。Ant是由一個內建任務和可選任務組成的。Ant執行時需要一個XML檔案(構建檔案)。Ant通過呼叫ta

XML檔案DTD路徑解析

1.XML檔案宣告的dtd檔案路徑如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Applicati

[C3P0]XML檔案配置使用

總檔案c3p0-config.xml配置: <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <def

Android如何獲取asset下的xml檔案,並解析

1.asset下的自定義xml檔案:<Language cat="it"> <lan id="1"> <name>Java</name> <ide>Eclipse</ide

Android核心技術-day02-09-生成xml檔案 解析

AndroidManifest.xml 方式一: package com.gaozewen.savexmlinfo; import android.Manifest; import android.os.Bundle; import android.os.Environment;

IOS資料處理版本特性-解析XML檔案

準備一個需要解析的xml檔案 <?xml version="1.0" encoding="UTF-8" ?> <workers>     <worker id='1'>         <n

Java解析XML檔案的常用方法介紹

1 import java.io.IOException; 2 3 import javax.xml.parsers.DocumentBuilder; 4 import javax.xml.parsers.DocumentBuilderFactory; 5 import javax.x

struts2中struts.xml和web.xml檔案解析工作原理

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmln

JAVA以及JSP中讀取XML檔案(解析路徑問題)

    在系統開發過程中,從配置檔案中讀取配置資訊是每一個系統必須具備的功能,例如,我們要配置讀取資料庫配置資訊,包括驅動程式名、連線字串,使用者名稱,口令等資訊,由於這些資訊會隨著使用者的不同而發生

Python解析XML檔案讀取XML不全的問題

之前用python的minidom寫過解析xml的指令碼檔案,在前期是比較好用的,因為xml檔案比較小。但是當xml檔案超過了70M的時候,minidom不僅效率低,而且會佔用非常大的記憶體空間,因為他是將整個xml讀入進去並且按照整個xml樹進行建樹(雖然這樣寫程式碼邏輯

AngularCLI介紹配置文件主要參數含義解析

prefix 域名 最佳實踐 netem cin 存儲 ng- idt 還需 使用Angular CLI可以快速,簡單的搭建一個angular2或angular4項目,是只要掌握幾行命令就能構建出前端架構的最佳實踐,它本質也是使用了webpack來編譯,打包,壓縮等構建的事

Spring介紹配置(XML文件配置和註解配置)

處理 tis 配置文件 3.0 span 特點 inverse logging 結構 本節內容: Spring介紹 Spring搭建 Spring概念 Spring配置講解 使用註解配置Spring 一、Spring介紹 1. 什麽是Spring

[z]分區truncate操作的介紹對全局索引和空間釋放影響的案例解析

執行計劃 失效 run segment ble 技術 一點 lte cascade [z]https://www.2cto.com/database/201301/181226.html 環境: [sql] [oracle@localhost ~]$ uname -r