Python常用內置模塊之xml模塊

来源:http://www.cnblogs.com/ginvip/archive/2017/05/22/6891534.html
-Advertisement-
Play Games

xml即可擴展標記語言,它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。從結構上,很像HTML超文本標記語言。但他們被設計的目的是不同的,超文本標記語言被設計用來顯示數據,其焦點是數據的外觀。它被設計用來傳輸和存儲數據,其焦點是數據的內容。那麼Python是如何處理 ...


xml即可擴展標記語言,它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。從結構上,很像HTML超文本標記語言。但他們被設計的目的是不同的,超文本標記語言被設計用來顯示數據,其焦點是數據的外觀。它被設計用來傳輸和存儲數據,其焦點是數據的內容。那麼Python是如何處理XML語言文件的呢?下麵一起來看看Python常用內置模塊之xml模塊吧。

本文主要學習的ElementTree是python的XML處理模塊,它提供了一個輕量級的對象模型。在使用ElementTree模塊時,需要import xml.etree.ElementTree的操作。ElementTree表示整個XML節點樹,而Element表示節點數中的一個單獨的節點。

構建XML文件

ElementTree(tag),其中tag表示根節點,初始化一個ElementTree對象。

Element(tag, attrib={}, **extra)函數用來構造XML的一個根節點,其中tag表示根節點的名稱,attrib是一個可選項,表示節點的屬性。

SubElement(parent, tag, attrib={}, **extra)用來構造一個已經存在的節點的子節點 Element.text和SubElement.text表示element對象的額外的內容屬性,Element.tag和Element.attrib分別表示element對象的標簽和屬性。

ElementTree.write(file, encoding='us-ascii', xml_declaration=None, default_namespace=None, method='xml'),函數新建一個XML文件,並且將節點數數據寫入XML文件中。

下麵以新建一個網站的sitemap.xml文件為例進行代碼示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from xml.etree import ElementTree as ET
def build_sitemap():
    urlset = ET.Element("urlset")   #設置一個根節點,標簽為urlset
    url = ET.SubElement(urlset,"url")   #在根節點urlset下建立子節點
    loc = ET.SubElement(url,"loc")
    loc.text = "http://www/baidu.com"
    lastmod = ET.SubElement(url,"lastmod")
    lastmod.text = "2017-10-10"
    changefreq = ET.SubElement(url,"changefreq")
    changefreq.text = "daily"
    priority = ET.SubElement(url,"priority")
    priority.text = "1.0"
    tree = ET.ElementTree(urlset)
    tree.write("sitemap.xml")
if __name__ == '__main__':
    build_sitemap()

結果如下圖所示:

解析和修改XML文件

ElementTree.parse(source, parser=None),將xml文件載入並返回ElementTree對象。parser是一個可選的參數,如果為空,則預設使用標準的XMLParser解析器。

ElementTree.getroot(),得到根節點。返回根節點的element對象。

Element.remove(tag),刪除root下名稱為tag的子節點 以下函數,ElementTree和Element的對象都包含。

find(match),得到第一個匹配match的子節點,match可以是一個標簽名稱或者是路徑。返回個element findtext(match,default=None),得到第一個配置的match的element的內容 findall(match),得到匹配match下的所有的子節點,match可以是一個標簽或者是路徑,它會返回一個list,包含匹配的elements的信息 iter(tag),創建一個以當前節點為根節點的iterator。

還是以上面創建的sitemap.xml為例,對其進行一定的修改,代碼示例如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from xml.etree import ElementTree as ET
tree = ET.parse("sitemap.xml")
url = tree.find("url")
for rank in tree.iter('loc'):
    rank.text = "http://www.adminba.com"
tree.write("sitemap.xml")

以上的代碼將url修改為http://www.adminba.com了。另外,節點還有set(設置節點屬性)、attrib(刪除節點屬性)方法。 


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

-Advertisement-
Play Games
更多相關文章
  • dplyr專註處理dataframe對象, 並提供更穩健的與其它資料庫對象間的介面。 一、5個關鍵的數據處理函數: select() 返回列的子集 filter() 返回行的子集 arrange() 根據一個或多個變數對行排序。 mutate() 使用已有數據創建新的列 summarise() 對各 ...
  • querySet.distinct() 去重覆__exact 精確等於 like 'aaa' __iexact 精確等於 忽略大小寫 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小寫 ilike '%aaa%',但是對於sqlit ...
  • Given a list, rotate the list to the right by k places, where k is non-negative. ...
  • 一:參考官方文檔 1. Elasticsearch 5.4.0英文手冊 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search-request-post-filter.html 2. 《Elasticsearch權威指南》 ...
  • 在這裡我們要說的拓撲排序是有前提的 我們在這裡說的拓撲排序是基於有向無環圖的!!!。 (⊙o⊙)…我所說的有向無環圖都知道是什麼東西吧。。 如果不知道,我們下麵先來來說說什麼是有向無環圖。 所謂有向無環圖,顧名思義是不存在環的有向圖(至於有向圖是什麼不知道的在前面我們有一個圖論講解上都有)。 點的入 ...
  • ★☆ 輸入文件:2015message.in 輸出文件:2015message.out 簡單對比 時間限制:1 s 記憶體限制:256 MB 【題目描述】 有n個同學(編號為1到n)正在玩一個信息傳遞的游戲。在游戲里每人都有一個固定的信息傳遞對象,其中,編號為i的同學的信息傳遞對象是編號為Ti同學。 ...
  • 今天繼續函數的講解: 目錄: 1.函數對象 2.函數嵌套 3.名稱空間和作用域 4.閉包 5.裝飾器 6.迭代器 7.生成器 8.內置函數 第一部分:函數對象 在python中,一切皆對象,想int,str,list,dict,tuple等等,所以函數也不例外,對象都具有屬性。作為對象,它可以賦值給 ...
  • 最近工作中要用到搜索引擎,由於目前用的搜索引擎是LeanCloud 提供的 ,不太好用,不支持範圍等搜索,而且每天還收費30元,請求次數也有限制。基於這些原因,我們只好在自己的伺服器上部署搜索引擎了。 經過一番調研結合我們自身的技術,選擇使用Elasticsearch,下麵介紹Elasticsear ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...