一. XML 模块

  是一种定义电子文档结构和描述的语言,可以标记数据,定义数据类型

  标记翻译为标签,标签是指某种特殊符号,XML是用标签来定义文档结构

  标签的组成:<person name='egon'> hello my friend</person>

    1. 标签名: person

    2. 属性(attribute): name='egon'

    3. 文本(text):hello my friend

  空标签:  <person></person>   或  <person/>

  标签格式要求:

    1. 任何的起始标签都必须有一个结束标签

    2.标签必须按顺序嵌套,结束标签必须按镜像顺序匹配起始标签

    3.所有属性都必须有值

    4.属性的值必须加双引号

    5. 最外层为根标签,只能有一个根标签

  解析 xml:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>     
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <neighbor name="Malaysia" direction="N"/>

</data>

import xml.etree.ElementTree as ET
# 先用.parser 解析文档,类似读取文档
tree=ET.parser('xmltest.xml')
root=tree.getroot() # 获得根标签
# 遍历xml文档
for child in root:
  for son in child:
    print(son.tag) # rank
    print(son.attrib) #字典{'updated': 'yes'}
    print(son.text) #2
# 只遍历year节点
for node in root.iter():
  print(node) # 打印全部标签,全文搜索
for node in root.iter('year'): # 将全文的'year'搜索出来
  print(node.tag)
  print(node.text)
--------------------------------------------------------------------
import xml.etree.ElementTree as ET
tree=ET.parser('file.xml')
root=tree.getroot()

   总结:

    查找标签函数: iter('标签名‘)    # 全文查找

            find('标签名’)   #查找子节点匹配的第一个

            findall('标签名‘)# 查找子节点匹配的所有

    访问标签的内容

            element.tag   获取标签名

            element.attrib  获取属性

            element.text  获取文本

    修改文档内容:

            element.tag='标签名‘

            element.attrib='文本’

            element.set('属性名‘,’属性值‘)

    删除节点:

          root.remove('标签对象’)

    添加子标签:

          year2=ET.Element('year2')   # 指定名称

          year2.text='新年'

          year2.attrib={'update':'yes'}

          country.append(year2)  在country节点下添加子节点

    写入文件:

          tree.write('文件名‘)

# 代码生成XML文档

import xml.etree.ElementTree as ET new_xml = ET.Element("namelist") name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) age = ET.SubElement(name, "age", attrib={"checked": "no"}) sex = ET.SubElement(name, "sex") sex.text = 'man' 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) # 打印生成的格式

与JSON 对比:

  json是一种数据格式,使用场景多维前后台交互

  xml 支持的数据类型理论上不收显示,完全可以自定义标签的结构和含义。在一些语言中经常作为配置文件来使用

posted on 2018-12-11 18:35  Afrafre  阅读(174)  评论(0编辑  收藏  举报