zoukankan      html  css  js  c++  java
  • XML模块

    XML,可扩展标记语言,用来传输和存储数据。

     xml的文件格式:

    <?xml   version="1.0"   encoding="utf-8"?>      
      <userdata   createuser="false">userdata内容  
          <dataconnection>  
              <server>localhost</server>  
              <uid>sa</uid>  
              <pwd></pwd>  
          </dataconnection>  
          <net>  
              <name>jiayuan</name>  
          </net>  
      </userdata>

    xml中节点Element类的函数

    复制代码
     1 tag                   当前节点标签名
     2 attrib                当前节点属性
     3 text                  当前节点内容
     4 append                添加一个子节点
     5 clear                 清空节点
     6 extend                为当前节点添加 n 个子节点
     7 find                  获取第一个寻找到的子节点
     8 findall               获取所有的子节点
     9 findtext              获取第一个寻找到的子节点的内容
    10 get                   获取当前节点的属性
    11 insert                在当前节点创建子节点,然后插入指定位置
    12 items                 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
    13 iter                  在根据节点名称寻找所有指定的节点,并返回一个迭代器
    14 iterfind              获取所有指定的节点,并放在一个迭代器中
    15 itertext              在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
    16 keys                  获取当前节点的所有属性的 key
    17 makeelement           创建一个新节点
    18 remove                删除某个节点
    19 set                   设置当前节点属性
    复制代码

    xml解析

      1.ElementTree.XML(str)函数
    1 from xml.etree import ElementTree as ET
    2 
    3 with open("data.xml",'r') as file:
    4     #将xml文档中内容读取到strXml中
    5     strXml =file.read()
    6     #XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
    7     root=ET.XML(strXml)
    8     print(type(root))
    XML 
      2.ElementTree.parse("file_path")函数
    1 #打开xml文件并且解析,返回一个xml.etree.ElementTree.ElementTree对象
    2 tree=ET.parse("data.xml")
    3 #获取xml的根节点
    4 root=tree.getroot()
    5 
    6 print(root.tag)
    parse
    
    

     遍历指定的节点

    1 with open("data.xml",'r',encoding="utf-8") as file:
    2     #将xml文档中内容读取到strXml中
    3     strXml =file.read()
    4     #XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
    5     root=ET.XML(strXml)
    6     for value in root.iter("uid"):
    7         print(value.tag,value.text)
    遍历指定节点

    修改节点的内容并保存

     1 with open("data.xml",'r',encoding="utf-8") as file:
     2     #将xml文档中内容读取到strXml中
     3     strXml =file.read()
     4     #XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
     5     root=ET.XML(strXml)
     6     node=root.find("dataconnection")
     7     print(node)
     8     node.set("name","hello,xml")
     9 #利用ET.XML这种方法打开XML的话不能直接保存,需要借助ET.ElementTree
    10 #如果使用的ET.parse(filePath)打开的话,就不需要额外的创建一个ElementTree对象
    11     tree=ET.ElementTree(root)
    12     tree.write("data.xml",encoding="utf-8")
    修改并保存
     1 with open("data.xml",'r',encoding="utf-8") as file:
     2     #将xml文档中内容读取到strXml中
     3     strXml =file.read()
     4     #XML将字符串解析成xml特殊对象,返回xml.etree.ElementTree.Element对象,这个是根节点
     5     root=ET.XML(strXml)
     6     node=root.find("dataconnection")
     7     root.remove(node)
     8 #利用ET.XML这种方法打开XML的话不能直接保存,需要借助ET.ElementTree
     9 #如果使用的ET.parse(filePath)打开的话,就不需要额外的创建一个ElementTree对象
    10     tree=ET.ElementTree(root)
    11     tree.write("data.xml",encoding="utf-8")
    删除节点并保存

     创建XML文档

     1 from xml.etree import ElementTree as ET
     2 #创建根节点
     3 root=ET.Element("home",{"name":"root"})
     4 
     5 #创建子节点,也可以用下面的方式创建,但只是创建,还没有加到任何节点下面
     6 #sub=root.makeelement("son",{"sonName":"haha"}),下面同样可以
     7 sub=ET.Element("son",{"sonName":"haha"})
     8 
     9 subsub=ET.Element("subson",{"subsonName":"xixi"})
    10 
    11 root.append(sub)
    12 
    13 sub.append(subsub)
    14 tree=ET.ElementTree(root)
    15 tree.write("createXml.xml")
    16 
    17 ###########结果(实际上是没有缩进的)############
    18 <home name="root">
    19     <son sonName="haha">
    20         <subson subsonName="xixi" />
    21     </son>
    22 </home>
     1 from xml.etree import ElementTree as ET
     2 
     3 root=ET.Element("home",{"name":"root"})
     4 #创建节点并添加到第一个参数的节点下面
     5 sub=ET.SubElement(root,"son",{"subName":"haha"})
     6 
     7 subsub=ET.SubElement(sub,"son",{"subName":"haha"})
     8 
     9 tree=ET.ElementTree(root)
    10 tree.write("createXml2.xml")
    11 
    12 #########结果(结果实际上没有缩进)###########
    13 <home name="root">
    14     <son subName="haha">
    15         <son subName="haha" />
    16     </son>
    17 </home>

    增加缩进

     1 from xml.etree import ElementTree as ET
     2 from xml.dom import minidom
     3 
     4 def prettify(elem):
     5     """
     6     将节点转换成字符串,并添加缩进
     7     """
     8     #返回该对象的字符串表示
     9     rough_string = ET.tostring(elem, 'utf-8')
    10     print(type(rough_string))
    11     #从xml字符串得到dom对象
    12     reparsed = minidom.parseString(rough_string)
    13     print(type(reparsed))
    14     return reparsed.toprettyxml(indent="	")
    15 
    16 root=ET.Element("home",{"name":"root"})
    17 #创建节点并添加到第一个参数的节点下面
    18 sub=ET.SubElement(root,"son",{"subName":"haha"})
    19 
    20 subsub=ET.SubElement(sub,"son",{"subName":"haha"})
    21 
    22 newStr=prettify(root)
    23 
    24 file=open("createXml3.xml","w",encoding="utf-8")
    25 file.write(newStr)
    26 file.close()
    利用xml.dom.minidom增加缩进

    命名空间的使用

     1 from xml.etree import ElementTree as ET
     2 #注册命名空间
     3 ET.register_namespace("baidu","http://baidu.com")
     4 
     5 root=ET.Element("{http://baidu.com}home",{"name":"root"})
     6 #创建节点并添加到第一个参数的节点下面
     7 sub=ET.SubElement(root,"{http://baidu.com}son",{"{http://baidu.com}subName":"haha"})
     8 
     9 subsub=ET.SubElement(sub,"{http://baidu.com}son",{"{http://baidu.com}subName":"xixi"})
    10 
    11 tree=ET.ElementTree(root)
    12 tree.write("createXml4.xml")
    13 
    14 ###########结果(实际中没有缩进)##############
    15 <baidu:home xmlns:baidu="http://baidu.com" name="root">
    16     <baidu:son baidu:subName="haha">
    17         <baidu:son baidu:subName="xixi" />
    18     </baidu:son>
    19 </baidu:home>
    命名空间的使用
  • 相关阅读:
    学习ExtJS(十一) accordion布局
    学习ExtJS(十) form布局
    使用PS保存PDF为图片(JPG)
    问题12:能否说:“电路交换和面向连接是等同的,而分组交换和无连接是等同的”? 答:不行。这在概念上是很不一样的。这点可举例说明如下。
    使用matlab判断CDMA接收码片
    问题115:什么是“无缝的”、“透明的”和“虚拟的”?
    百度域名信息
    问题110:有这样的说法:习惯上,人们都将网络的“带宽”作为网络所能传送的“最高数据率”的同义语。这样的说法有何根据?
    问题111:有时可听到人们将“带宽为10 Mb/s的以太网”说成是“速率(或速度)为10 Mb/s的以太网”或“10兆速率(或速度)的以太网”。试问这样的说法正确否?
    Tomcat中显示目录的配置
  • 原文地址:https://www.cnblogs.com/Young-shi/p/11275944.html
Copyright © 2011-2022 走看看