pyhon模块-5
2017-02-15 16:51
183 查看
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单
至今很多传统公司如金融行业的很多系统的接口还主要是xml
xml是通过<>节点来区别数据结构的:
<?xml version="1.0" encoding="UTF-8" ?> <OPTION> <Graphic Ver="15" ExclusiveMode="false" FullScreen="false" VSync="false" Refresh="0" TopMost="false" FixedSet="0" WindowPosX="-10" WindowPosY="2" WindowWidth="1914" WindowHeight="1006" FullScreenWidth="1920" FullScreenHeight="1080" HardwareSkinning="false"> <Quality_User> <Texture Detail="2" Bias="-0.5" /> <Water Detail="1" /> <Effect Detail="2" /> <Shadow ActorShadowDetail="3" SceneShadowDetail="3" /> <Fog Detail="2" /> <Hdr Enable="true" /> <Glow Enable="true" /> <DOF Enable="true" /> <SSAO Enable="false" /> <RimLight Enable="true" /> <DepthFog Enable="false" /> <Antialias Enable="true" /> <NetworkPet Enable="true" /> <ViewDistance Value="2" /> <Filter MapObjectLV1="true" MapObjectVolumeFog="false" /> <ClipDist FarPlane="156000" DecorationLOD="0.53713" Pc="6750" Pet="4050" Npc="9045" NpcSP="15000" Monster="6750" MonsterSP="15000" Boss="15000" GameObject="6750" Effect="5400" MeshEffect="4050" Decal="5400" GhostTrail="4050" DynamicLight="4050" Chain="4050" Shadow="4050" NamePlate="4050" MapObjectLV1="15000" MapObjectLV2="30000" MapObjectLV3="60000" MapObjectLV4="105000" MapObjectLV5="150000" MapObjectLV6="60000" MapObjectVolumeFog="14400" /> <SceneTheme FogColorBlendTime="5" ShadowMoveTime="5" SkyColorBlendTime="5" SkyTextureBlendTime="5" LightPosOriMoveTime="5" SunColorBlendTime="5" /> </Quality_User> </Graphic> <Sound Ver="2"> <SoundMute Value="false" /> <RepeatBGM Value="true" /> <ExclusiveMode Value="true" /> <VolumeBGM Volume="0.5" /> <VolumeFX Volume="1" /> <VolumeEnv Volume="0.7" /> <VolumeUI Volume="0.5" /> <VolumeVoice Volume="1" /> </Sound> <UI Ver="8"> <Battle AutoAttack="true" CounterAttack="true" SmartCasting="false" /> <Indicate LocalPlayerName="true" PartyMemberName="true" LocalNationName="true" OtherNationName="true" MontserName="true" GuideName="true" LocalPlayerBar="true" PartyMemberBar="true" LocalNationBar="true" OtherNationBar="true" MonsterBar="true" PetName="true" NpcName="true" NpcBar="true" /> <BattleMSG TargetDamage="true" Circumstances="true" Damage="true" DodgeOrBlock="true" HpRecovery="true" MpRecovery="true" GetExp="true" /> <Community SlangFilter="true" NormalChatBubble="true" PartyChatBubble="true" InvitePartyRejection="false" RequestTradeRejection="false" RequestDuelRejection="false" InviteGuildRejection="false" ConnectGuideMember="true" /> <ETC QuestTake="true" QuestComplete="true" Skill="true" Genome="true" Help="true" ShowAutoGuide="true" ShakeSensitivity="5" RotateSensitivity="1" DistStep="7" MultiThreadAnim="false" OpenEventDlg="true" OpenGuideDlg="true" /> </UI> </OPTION>
xml协议在各种语言里面都是可支持的,在python中,使用下面的模块来对xml进行操作:
import xml.etree.ElementTree as ET tree = ET.parse("option.xml") #打开xml文件 root = tree.getroot() #获取根节点 print(root.tag) #打印根节点的标签
执行结果:
OPTION
遍历整个xml:
for child in root: print(child.tag,child.attrib) #打印孩子节点的标签和属性
执行结果:
Graphic {'WindowWidth': '1914', 'Refresh': '0', 'FullScreenHeight': '1080', 'HardwareSkinning': 'false', 'WindowHeight': '1006', 'Ver': '15', 'FixedSet': '0', 'TopMost': 'false', 'FullScreenWidth': '1920', 'WindowPosX': '-10', 'ExclusiveMode': 'false', 'WindowPosY': '2', 'VSync': 'false', 'FullScreen': 'false'} Sound {'Ver': '2'} UI {'Ver': '8'}
遍历指定属性:
for child in root: for i in child.iter('Quality_User'): #指定遍历Quality_User for x in i: print(x.tag,x.text,x.attrib) #text是值
执行结果:
Texture None {'Detail': '2', 'Bias': '-0.5'} Water None {'Detail': '1'} Effect None {'Detail': '2'} Shadow None {'SceneShadowDetail': '3', 'ActorShadowDetail': '3'} Fog None {'Detail': '2'} Hdr None {'Enable': 'true'} Glow None {'Enable': 'true'} DOF None {'Enable': 'true'} SSAO None {'Enable': 'false'} RimLight None {'Enable': 'true'} DepthFog None {'Enable': 'false'} Antialias None {'Enable': 'true'} NetworkPet None {'Enable': 'true'} ViewDistance None {'Value': '2'} Filter None {'MapObjectLV1': 'true', 'MapObjectVolumeFog': 'false'} ClipDist None {'Boss': '15000', 'Monster': '6750', 'Pc': '6750', 'MapObjectVolumeFog': '14400', 'Chain': '4050', 'Pet': '4050', 'MapObjectLV4': '105000', 'MapObjectLV2': '30000', 'FarPlane': '156000', 'NamePlate': '4050', 'Effect': '5400', 'DynamicLight': '4050', 'MonsterSP': '15000', 'MapObjectLV6': '60000', 'MeshEffect': '4050', 'DecorationLOD': '0.53713', 'MapObjectLV5': '150000', 'GameObject': '6750', 'Decal': '5400', 'Npc': '9045', 'NpcSP': '15000', 'Shadow': '4050', 'MapObjectLV3': '60000', 'GhostTrail': '4050', 'MapObjectLV1': '15000'} SceneTheme None {'SunColorBlendTime': '5', 'ShadowMoveTime': '5', 'FogColorBlendTime': '5', 'SkyTextureBlendTime': '5', 'SkyColorBlendTime': '5', 'LightPosOriMoveTime': '5'}
修改:
for child in root: for i in child.iter('Quality_User'): for x in i.iter('Water'): print(x.tag, x.text, x.attrib) # text是值 new_detail = '2' x.text = str(new_detail) #新增值为2 x.set("changed",'yes') #set,增加标签属性“changed”,值为“yes” tree.write('option.xml')
执行完成后,文件更新为
<Texture Bias="-0.5" Detail="2" /> <Water Detail="1" changed="yes">2</Water> <Effect Detail="2" /> <Shadow ActorShadowDetail="3" SceneShadowDetail="3" />
删除:
将刚刚修改的‘Water’节点信息删除掉:
for child in root: for node in child.iter('Quality_User'): for key in node.findall('Water'): print(key.tag,key.text,key.attrib) if key.tag == 'Water': node.remove(key) tree.write('option2.xml')
为了区分,我们将信息保存在option2.xml中
执行完成后,option2.xml中,已经没有了刚刚的‘Water’节点:
<Texture Bias="-0.5" Detail="2" /> <Effect Detail="2" /> <Shadow ActorShadowDetail="3" SceneShadowDetail="3" />
创建xml文档:
xml2 = ET.Element("Member") name = ET.SubElement(xml2,'person1',attrib={'name':'s1','enroll':'yes'}) #创建根节点person1,属性有name,enroall age = ET.SubElement(name,'age',attrib={'checked':'no'}) #创建孩子节点age,属性有checked age.text = '24' #age的内容为24 sex = ET.SubElement(name,'sex') #创建孩子节点sex sex.text = 'Female' #sex的内容为Female name2 = ET.SubElement(xml2,'person2',attrib={'name':'s2','enroll':'no'}) age2 = ET.SubElement(name2,'age',attrib={'checked':'yes'}) age2.text = '32' sex2 = ET.SubElement(name2,'sex') sex2.text = 'Male' et = ET.ElementTree(xml2) et.write('test4.xml',encoding='utf-8',xml_declaration=True)
注意,xml_declaration = True,是指在xml中生成申明:
<?xml version='1.0' encoding='utf-8'?>
执行完成后,会生成test4.xml文件:
<?xml version='1.0' encoding='utf-8'?> <Member> <person1 enroll="yes" name="s1"> <age checked="no">24</age> <sex>Female</sex> </person1> <person2 enroll="no" name="s2"> <age checked="yes">32</age> <sex>Male</sex> </person2> </Member>
相关文章推荐
- PYHON 模块安装常用命令
- 如何安装pip无法安装的pyhon模块(以PIL为例)
- pyhon模块之日志模块
- pyhon中用到的模块
- pyhon 安装第一个模块 xlrd
- 在pyhon中使用glob模块按照正则来寻找文件
- Pyhon Paramiko模块
- pyhon的json模块
- Pyhont 正则化模块常用操作
- 嵌入式 pyhon的import模块用法解析
- OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器&绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用
- Python爬虫学习(4): python中re模块中的向后引用以及零宽断言
- mod_pyhon安装 2012-6-2
- 模块间通信 --linux
- NodeJS 常用模块推荐
- 零基础学python-模块的导入与重载
- 绕过现代Anti-Rookit工具的内核模块扫描
- 出差费用管理模块的几个问题
- Ansible基础配置与常用模块使用
- perl模块安装