day5模塊學習--XML模塊

来源:http://www.cnblogs.com/gengcx/archive/2017/07/23/7226632.html
-Advertisement-
Play Games

XML文件處理 XML文件處理,有好幾種方式,這裡介紹一下xml.etree.ElementTree as ET。 註意:xml.etree.ElementTree模塊在應對惡意結構數據時顯得並不安全。 每個element對象都具有以下屬性: 1. tag:string對象,表示數據代表的種類; 2 ...


XML文件處理

    XML文件處理,有好幾種方式,這裡介紹一下xml.etree.ElementTree as ET。

    註意:xml.etree.ElementTree模塊在應對惡意結構數據時顯得並不安全。

    每個element對象都具有以下屬性:

    1. tag:string對象,表示數據代表的種類;

    2. attrib:dictionary對象,表示附有的屬性;

    3. text:string對象,表示element的內容;

    4. tail:string對象,表示element閉合之後的尾跡

    5. 若幹子元素(child elements)。

    <tag attrib1=1>text</tab>tail

      1     2       3         4

    創建元素的方法有Element或者SubElement(),前者稱作元素的構建函數(constructor),用以構建任一獨存的元素;後者稱作元素的製造函數(factory function),用以製造某一元素的子元素。

    有了一串元素之後,使用ElementTree類來將其打包,把一串元素轉換為xml文件或者XML文件中解析出來。

    若想加快速度,可以使用C語言編譯的API xml.etree.cElementTree。

    在使用xml.etree.ElementTree時,一般都按如下導入:

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

    XML是中結構化數據形式,在ET中使用ElementTree代表整個XML文檔,並視其為一棵樹,Element代表這個文檔樹中的單個節點。

    ET對象具有多種方法從不同來源導入數據,如下:

#從硬碟的xml文件讀取數據
try
: import xml.etree.ElementTree as ET except ImportError: import xml.etree.cElementTree as ET tree = ET.parse("XML文件") #載入數據 root = tree.getroot() print(root) print(root.tag) #獲取根節點

 

    #遍歷xml文檔

   

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

tree = ET.parse("XML文件")     #載入數據
root = tree.getroot()
for child in root:             #遍歷節點
    print(child.tag,child.attrib)
輸出如下:
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

    #只遍歷year 節點

   

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

tree = ET.parse("XML文件")     #載入數據
root = tree.getroot()
for node in root.iter("year"):
    print(node.tag,node.text)
輸出如下:
year 2008
year 2011
year 201

    修改和刪除xml文檔內容

   

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

tree = ET.parse("XML文件")     #載入數據
root = tree.getroot()
#修改
for node in root.iter("year"):
    new_year = int(node.text) + 1     #node.text()值,屬性的值
    node.text = str(new_year)
    node.set("update","yes")

tree.write("XML文件")     #修改文件之後,重新寫入文件裡面,不然修改文件是無效的


#刪除node
for country in root.findall("country"):
    rank = int(country.find("rank").text)
    if rank > 50:
        root.remove(country)

tree.write("output.xml")

    文件操作中,每次修改完成數據之後,要重新寫會文件之中,不然修改文件是沒有用的。要重新寫會文件才有效果。

    Element中的遍歷與查詢

 

    Element.iter(tag=None):遍歷該Element所有後代,也可以指定tag進行遍歷尋找。

    try:
    import xml.etree.ElementTree as ET
  except ImportError:
    import xml.etree.cElementTree as ET
  tree = ET.parse("XML文件") #載入數據
  root = tree.getroot()
  for node in root.iter():
    print(node)

    Element.findall(path):查找當前元素下tag或path能夠匹配的直系節點。

    Element.find(path):查找當前元素下tag或path能夠匹配的首個直系節點。

    Element.text: 獲取當前元素的text值。

    Element.get(key, default=None):獲取元素指定key對應的屬性值,如果沒有該屬性,則返回default值。

    ElementTree對象

class xml.etree.ElementTree.ElementTree(element=None, file=None)
  element如果給定,則為新的ElementTree的根節點。

  _setroot(element):用給定的element替換當前的根節點。慎用。
  
  # 以下方法與Element類中同名方法近似,區別在於它們指定以根節點作為操作對象。
  find(match)
  findall(match)
  findtext(match, default=None)
  getroot():獲取根節點.
  iter(tag=None)
  iterfind(match)
  parse(source, parser=None):裝載xml對象,source可以為文件名或文件類型對象.
  write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")

    自己創建xml文檔

   

import xml.etree.ElementTree as ET       
 
 
new_xml = ET.Element("namelist")                                     #根節點namelist
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})       #SubElement()子節點,new_xml的子節點
age = ET.SubElement(name,"age",attrib={"checked":"no"})              #創建子節點,name下的age節點
sex = ET.SubElement(name,"sex")
age.text = '33'                                                      #寫入值,age賦值
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = '19'
 
et = ET.ElementTree(new_xml) #生成文檔對象
et.write("test.xml", encoding="utf-8",xml_declaration=True)
 
ET.dump(new_xml) #列印生成的格式 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個基於Entity Framework的自定義分頁,增刪改的通用實現,同時包含Entity的生成,Specification模式,Unit of Work實現。 ...
  • 引子在此前的一篇文章中,我介紹瞭如何在本地docker環境中運行ASP.NET Core跨平臺應用程式(http://www.cnblogs.com/chenxizhang/p/7148657.html),看起來非常不錯,不是嗎?那麼,如果我們希望真正在實際的生產環境去部署和運行這個應用程式,應該怎... ...
  • 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁 @Html.LabelFor(model => model.Name, htmlAttributes: n ...
  • yaml文件處理(http://pyyaml.org/wiki/PyYAMLDocumentation) 摘要: 本文講的是yaml在python上的使用教程詳解, YAML是一種容易人類閱讀、適合表示程式語言的數據結構、可用於不同程式間交換數據、支持泛型工具、支持串列處理、豐富的表達能力和可擴展性 ...
  • Numpy指南筆記 第2章:Numpy基礎 創建多維數組# coding:utf-8import numpy as npm=np.array([np.arange(2),np.arange(2)])print mprint m.shape 一維數組切片和索引# coding:utf-8import ...
  • 流 數據流 用於傳輸數據。IO流 Input/Output流。數據從外部流向程式 輸入流;數據從程式流向外部的時候--輸出流。讀取一個文件 數據從文件流向程式 輸入流;向一個文件中寫入數據 數據從程式流向文件 輸出流 根據數據流動的方向:輸入流/輸出流 根據數據傳輸的形式:位元組流/字元流 輸入流 輸 ...
  • 要求: Readme: 運行程式,輸入薪水,根據商品列表的序號選擇購買的商品,可以選擇多次購買,或者不購買 流程圖: 代碼: ...
  • #列印實心菱形,思路:分上下,i控制行,j控制列印的空格數,k控制列印的*數量row = int(input("please input a raw number: "))for i in range(row): #i控制行數 for j in range(row-1-i):#空格數和行數的關係 p ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...