xml

2018-08-28  本文已影响0人  ft207741

Menu


xml定义

创建xml文件
import xml.etree.ElementTree as ET

root_tag = ET.Element("animals")       # roottag
fly = ET.SubElement(root_tag, "fly", attrib={"type": "fly animals"})    # subtag
bee = ET.SubElement(fly, "bee")    
bee.text = "I am bee, i can fly!"      # text
owl = ET.SubElement(fly, "owl")
owl.text = "I am owl, i can fly!"

run = ET.SubElement(root_tag, "run", attrib={"type": "run animals"})
tiger = ET.SubElement(run, "tiger")
tiger.text = "I am tiger, i can run!"
elephant = ET.SubElement(run, "elephant")
elephant.text = "I am elephant, i can run!"

# 写入文件
et = ET.ElementTree(root_tag) #生成ElementTree对象
# 写入到文件,内容编码(不指明默认为ascii, 添加xml声明:<?xml version='1.0' encoding='utf-8'?>)
et.write("myxml.xml", encoding="utf-8", xml_declaration=True)  
ET.dump(fly)  # 打印指定element, 会打印指定标签和指定标签后代标签;
<?xml version='1.0' encoding='utf-8'?>
<animals>
    <fly type="fly animals">
        <bee bee_type="bumblebee">I am bee, i can fly!
            <footnumber>6</footnumber>
        </bee>
        <owl>I am owl, i can fly!
            <footnumber>2</footnumber>
        </owl>
    </fly>
    <run type="run animals">
        <tiger>I am tiger, i can run!
            <footnumber>4</footnumber>
        </tiger>
        <elephant>I am elephant, i can run!
            <footnumber>4</footnumber>
        </elephant>
    </run>
</animals>

xml基本操作(遍历,打印tag、属性和text)
"遍历孙子标签, 并打印tag、attribute和text"
xmlFileObj = ET.parse("myxml.xml")     # 生成文件对象 并 解析
root = xmlFileObj.getroot()         # 从文件对象得到root对象
for onelevel in root:
    for twolevel in onelevel:
        print(twolevel.tag, twolevel.attrib, twolevel.text)

"""
bee {'bee_type': 'bumblebee'} I am bee, i can fly!
owl {} I am owl, i can fly!
tiger {} I am tiger, i can run!
elephant {} I am elephant, i can run!
"""

修改tag的text
# 修改Element内容
"修改 footnumber属性, 并重新写到文件"

for i in root.iter("footnumber"):    # 遍历root下面的标签并找到指定标签,如不填参数则返回所有标签;
    newfoot = int(i.text) + 1
    i.text = str(newfoot)           # 重新赋值
    i.set("updated", "yes")   # add attribute
    print(i.tag, i.text)
    # "如果修改结果重新写到文件需要加↓代码 "
    # xmlFileObj.write("myxml.xml")
'''
result:
footnumber 7
footnumber 3
footnumber 5
footnumber 5
'''

删除xml的tag
"animals -> fly -> bee -> footnumber"
"只能用上级tag对象来删除下一级的tag对象 如:beeObj.remove(footnumberObj)"
import xml.etree.ElementTree as ET
xmlFileObj = ET.parse("bb.xml")     # 生成文件对象 并 解析
root = xmlFileObj.getroot()         # 从文件对象得到root对象

for obj in root.iter("bee"):   
    footNoObj = obj.find("footnumber")
    obj.remove(footNoObj)         # 删除bee下的footnumber
xmlFileObj.write("bb.xml")  # 写入文件

上一篇 下一篇

猜你喜欢

热点阅读