1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      標(biāo)準(zhǔn)庫(kù)系列之xml模塊-創(chuàng)新互聯(lián)

      Python標(biāo)準(zhǔn)庫(kù)系列之xml模塊


      創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、寧海網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為寧海等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

      Python’s interfaces for processing XML are grouped in the xml package.

      帶分隔符的文件僅有兩維的數(shù)據(jù):行和列。如果你想在程序之間交換數(shù)據(jù)結(jié)構(gòu),需要一種方法把層次結(jié)構(gòu)、序列、集合和其他的結(jié)構(gòu)編碼成文本。


      XML是最突出的處理這種轉(zhuǎn)換的標(biāo)記(markup)格式,它使用標(biāo)簽(tag)分個(gè)數(shù)據(jù),如下面的實(shí)例文件menu.xml所示:

      
      
        安生's Blog
        大好時(shí)光!
        
        
        
        2016-05-24T15:29:19.000Z
        
         
        
          安生
        
      

      XML的一些重要特性

      1. 標(biāo)簽以一個(gè)<字符開頭,例如實(shí)例中的feed、title、subtitle、author。

      2. 忽略空格

      3. 通常一個(gè)開始標(biāo)簽跟一段其他的內(nèi)容,然后是最后相匹配的結(jié)束標(biāo)簽,例如

        大好時(shí)光!
      4. 標(biāo)簽之間是可以存在多級(jí)嵌套的

      5. 可選屬性(attribute)可以出現(xiàn)在開始標(biāo)簽里

      6. 標(biāo)簽中可以包含值(value)

      7. 如果一個(gè)命名為thing的標(biāo)簽內(nèi)沒有內(nèi)容或者子標(biāo)簽,那么它可以用在右尖括號(hào)的前面添加斜杠的簡(jiǎn)單標(biāo)簽所表示,例如

        代替開始和結(jié)束都存在的標(biāo)簽。

      8. 存放數(shù)據(jù)的位置可以是任意的—-屬性、值或者子標(biāo)簽。

      XML通常用于數(shù)據(jù)傳送和消息,它存在一些子格式,如RSS和Atom,例如:https://blog.ansheng.me/atom.xml

      在Python中解析XML最簡(jiǎn)單的方法是使用ElementTree

      模塊說(shuō)明
      xml.etree.ElementTreethe ElementTree API, a simple and lightweight XML processor

      創(chuàng)建xml文件

      導(dǎo)入ElementTree方法,起一個(gè)別名為ET

      >>> from xml.etree import ElementTree as ET

      創(chuàng)建頂級(jí)標(biāo)簽

      >>> level_1 = ET.Element("famliy")

      創(chuàng)建二級(jí)標(biāo)簽,tag名name,attrib標(biāo)簽屬性

      >>> level_2 = ET.SubElement(level_1, "name", attrib={"enrolled":"yes"})

      創(chuàng)建三級(jí)標(biāo)簽

      >>> level_3 = ET.SubElement(level_2, "age", attrib={"checked":"no"})

      生成文檔

      >>> tree = ET.ElementTree(level_1)

      寫入文件中

      >>> tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

      導(dǎo)入os模塊,用os模塊中的system方法執(zhí)行shell命令查看剛才創(chuàng)建的oooo.xml文件

      >>> import os
      >>> os.system("cat oooo.xml")
      # 生成出來(lái)的文檔是沒有換行的
      0

      把剛才生成的文件下載到本地,然后用瀏覽器打開就可以看到分級(jí)層次了。

      標(biāo)準(zhǔn)庫(kù)系列之xml模塊

      創(chuàng)建一個(gè)有換行的XML文件

      代碼

      from xml.etree import ElementTree as ET
      from xml.dom import minidom
      
      root = ET.Element('level1',{"age":"1"})
      son = ET.SubElement(root,"level2",{"age":"2"})
      ET.SubElement(son, "level3", {"age":"3"})
      
      # tree = ET.ElementTree(root)
      # tree.write("abc.xml", encoding="utf-8",xml_declaration=True,short_empty_elements=False)
      
      def prettify(root):
          rough_string = ET.tostring(root, 'utf-8')
          reparsed = minidom.parseString(rough_string)
          return reparsed.toprettyxml(indent="\t")
          
      new_str = prettify(root)
      f = open("new_out.xml", "w")
      f.write(new_str)
      f.close()

      生成的xml文件

      
      
          
              
          
      

      解析XML

      first.xml文件內(nèi)容為:

      
          
              2
              2025
              141100
              
              
          
          
              5
              2028
              59900
              
          
          
              69
              2028
              13600
              
              
          
      

      first.xml文件在/root目錄下

      利用ElementTree.XML將字符串解析成xml對(duì)象

      >>> from xml.etree import ElementTree as ET
      # 打開文件,讀取XML內(nèi)容,將字符串解析成xml特殊對(duì)象,root代指xml文件的根節(jié)點(diǎn) 
      >>> root = ET.XML(open('first.xml', 'r').read())
      >>> root.tag
      'data'
      >>> for node in root:
      ...  print(node.tag, node.attrib)
      ... 
      ('country', {'name': 'Liechtenstein'})
      ('country', {'name': 'Singapore'})
      ('country', {'name': 'Panama'})
      >>> print(node.find('rank').text)
      69

      利用ElementTree.parse將文件直接解析成xml對(duì)象

      >>> from xml.etree import ElementTree as ET
      # 直接解析xml文件
      >>> tree = ET.parse("first.xml")
      # 獲取xml文件的根節(jié)點(diǎn)
      >>> root = tree.getroot()
      >>> root.tag
      'data'

      遍歷XML中指定的節(jié)點(diǎn)

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot()
      >>> for node in root.iter('year'):
              # 輸出node的tag和內(nèi)容
      ...     print(node.tag, node.text)
      ...
      year 2025
      year 2028
      year 2028

      增、刪、改XML

      為節(jié)點(diǎn)添加屬性

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot()
      >>> for node in root.iter("year"):
              # 查看原來(lái)的屬性
      ...     print(node.attrib)
      ...
      {}
      {}
      {}
      >>> for node in root.iter("year"):
             # 添加屬性
      ...    node.set("OS","Linux")
      ...
      >>> for node in root.iter("year"):
              # 查看添加的屬性
      ...     print(node.attrib) 
      ...
      {'OS': 'Linux'}
      {'OS': 'Linux'}
      {'OS': 'Linux'}
      # 把內(nèi)容寫入文件
      >>> tree.write("first.xml")

      刪除節(jié)點(diǎn)屬性

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot()
      >>> for node in root.iter("year"):
              # 刪除節(jié)點(diǎn)的OS屬性
      ...     del node.attrib['OS']
      ...
      # 寫入到文件當(dāng)中
      >>> tree.write("first.xml")

      查看屬性

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot()
      >>> for node in root.iter("year"):
      ...  print(node.attrib)
      ...
      # 節(jié)點(diǎn)內(nèi)容為空
      {}
      {}
      {}

      修改節(jié)點(diǎn)內(nèi)容

      修改year內(nèi)的數(shù)字自加1

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot() 
      >>> for node in root.iter("year"):
              # 輸出原來(lái)year的內(nèi)容
      ...     print(node.text)
              # 原來(lái)的值自加+
      ...     new_year = int(node.text) + 1
      ...     node.text = str(new_year)
      ...
      2025
      2028
      2028 
      # 寫入文件中
      >>> tree.write("first.xml")
      >>> for node in root.iter("year"):
              # 輸出寫入文件之后year的內(nèi)容
      ...     print(node.text)
      ...
      2026
      2029
      2029

      對(duì)節(jié)點(diǎn)操作的方法

      獲取節(jié)點(diǎn)的方法

      >>> from xml.etree import ElementTree as ET
      >>> tree = ET.parse("first.xml")
      >>> root = tree.getroot()
      >>> print(dir(root))
      ['__class__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'iter', 'iterfind', 'itertext', 'keys', 'makeelement', 'remove', 'set']

      方法有這么多,那么我們常用的也就是下面的幾個(gè)

      方法名說(shuō)明
      tag獲取tag標(biāo)簽名
      attrib獲取節(jié)點(diǎn)的屬性
      find獲取節(jié)點(diǎn)的內(nèi)容
      iter進(jìn)行迭代
      set設(shè)置屬性
      get獲取屬性

      實(shí)例

      判斷QQ是否在線

      騰訊提供了能夠查看QQ號(hào)碼是否在線的API,Y=在線;N=離線;E=QQ號(hào)碼錯(cuò)誤;A=商業(yè)用戶驗(yàn)證失敗;V=免費(fèi)用戶超過(guò)數(shù)量

      >>> import requests
      >>> from xml.etree import ElementTree as ET
      >>> r = requests.get("http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=6087414")
      >>> result = r.text
      >>> from xml.etree import ElementTree as ET
      >>> node = ET.XML(result)
      >>> if node.text == "Y":
      ...    print("在線")
      ... else:
      ...    print("離線")
      ...
      在線

      獲取列車起止時(shí)間

      代碼

      r = requests.get("http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=K234&UserID=")
      result = r.text
      root = ET.XML(result)
      for node in root.iter('TrainDetailInfo'):
          print(node.find('TrainStation').text,node.find('ArriveTime').text,node.find("StartTime").text)

      執(zhí)行結(jié)果

      C:\Python35\python.exe F:/Python_code/sublime/Week5/Day01/xml_mod.py
      上海(車次:K234\K235) None 11:12:00
      # 地點(diǎn) 停止    啟動(dòng)
      昆山 11:45:00 11:48:00
      蘇州 12:12:00 12:16:00
      無(wú)錫 12:44:00 12:55:00
      常州 13:22:00 13:26:00
      鎮(zhèn)江 14:13:00 14:16:00
      南京 15:04:00 15:16:00
      蚌埠 17:27:00 17:50:00
      徐州 19:38:00 19:58:00
      商丘 22:12:00 22:17:00
      開封 23:49:00 23:53:00
      鄭州 00:37:00 01:14:00
      新鄉(xiāng) 02:20:00 02:22:00
      鶴壁 03:01:00 03:03:00
      安陽(yáng) 03:33:00 03:36:00
      邯鄲 04:11:00 04:16:00
      邢臺(tái) 04:47:00 04:51:00
      石家莊 06:05:00 None
      Process finished with exit code 0

      #Python標(biāo)準(zhǔn)庫(kù) #Xml

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


      本文標(biāo)題:標(biāo)準(zhǔn)庫(kù)系列之xml模塊-創(chuàng)新互聯(lián)
      文章分享:http://ef60e0e.cn/article/cccjdi.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        台东市| 屯昌县| 泰顺县| 固原市| 新巴尔虎左旗| 菏泽市| 潮州市| 平乐县| 泸州市| 古蔺县| 盐山县| 榆林市| 罗定市| 大同市| 西安市| 桃江县| 阿克苏市| 安龙县| 沂南县| 隆子县| 滁州市| 益阳市| 淮滨县| 东山县| 郓城县| 农安县| 海伦市| 五寨县| 尼木县| 犍为县| 邛崃市| 新泰市| 商洛市| 漳平市| 黎平县| 江华| 霍邱县| 泰顺县| 乌兰察布市| 丹棱县| 垫江县|