Python3.5编程实现修改IIS WEB.CONFIG的方法示例
本文实例讲述了Python3.5编程实现修改IISWEB.CONFIG的方法。分享给大家供大家参考,具体如下:
#!/usr/bin/envpython3.5
#-*-coding:utf8-*-
fromxml.etree.ElementTreeimportElementTree,Element
defread_xml(in_path):
"""
读取并解析XML文件
:paramin_path:XML路径
:return:
"""
tree=ElementTree()
tree.parse(in_path)
returntree
defwrite_xml(tree,out_path):
"""
将XML文件写出
:paramtree:
:paramout_path:写出路径
:return:
"""
tree.write(out_path,encoding="utf-8",xml_declaration=True)
defif_match(node,kv_map):
"""
判断某个节点是否包含所有传入参数属性
:paramnode:节点
:paramkv_map:属性及属性值组成的MAP
:return:
"""
forkeyinkv_map:
ifnode.get(key)!=kv_map.get(key):
returnFalse
returnTrue
deffind_nodes(tree,path):
"""
查找某个路径匹配的所有节点
:paramtree:XML树
:parampath:节点路径
:return:
"""
returntree.findall(path)
defget_node_by_keyvalue(nodelist,kv_map):
"""
根据属性及属性值定位符合的节点,返回节点
:paramnodelist:节点列表
:paramkv_map:匹配属性及属性值MAP
:return:
"""
result_nodes=[]
fornodeinnodelist:
ifif_match(node,kv_map):
result_nodes.append(node)
returnresult_nodes
defchange_node_properties(nodelist,kv_map,is_delete=False):
"""
修改、增加、删除节点的属性及属性值
:paramnodelist:节点列表
:paramkv_map:属性及属性值MAP
:paramis_delete:
:return:
"""
fornodeinnodelist:
forkeyinkv_map:
ifis_delete:
ifkeyinnode.attrib:
delnode.attrib[key]
else:
node.set(key,kv_map.get(key))
defchange_node_text(nodelist,text,is_add=False,is_delete=False):
"""
改变、增加、删除一个节点的文本
:paramnodelist:节点列表
:paramtext:更新后的文本
:paramis_add:
:paramis_delete:
:return:
"""
fornodeinnodelist:
ifis_add:
node.text+=text
elifis_delete:
node.text=""
else:
node.text=text
defcreate_node(tag,property_map,content):
"""
新造一个节点
:paramtag:节点标签
:paramproperty_map:属性及属性值MAP
:paramcontent:节点闭合标签里的文件内容
:return:新节点
"""
element=Element(tag,property_map)
element.text=content
returnelement
defadd_child_node(nodelist,element):
"""
给一个节点添加子节点
:paramnodelist:节点列表
:paramelement:子节点
:return:
"""
fornodeinnodelist:
node.append(element)
defdel_node_by_tagkeyvalue(nodelist,tag,kv_map):
"""
同过属性及属性值定位一个节点,并删除之
:paramnodelist:父节点列表
:paramtag:子节点标签
:paramkv_map:属性及属性值列表
:return:
"""
forparent_nodeinnodelist:
childree=parent_node.getchildren()
forchildinchildree:
ifchild.tag==tagandif_match(child,kv_map):
parent_node.remove(child)
defconfig_file_rw(file):
"""
对XML配置文件进行修复以满足适应IIS
:paramfile:目标文件
:return:
"""
importre
x=re.compile("\n"
withopen(file,"w",encoding="utf-8")asfw:
fw.writelines(txt)
fw.close()
print("配置文件%s,修改成功!"%file)
if__name__=="__main__":
#1.读取xml文件
tree=read_xml("web.config")
#找到父节点
print()
nodes=find_nodes(tree,"connectionStrings/")
#通过属性准确定位子节点
result_nodes=(get_node_by_keyvalue(nodes,{"name":"strConnection_HuaChenShiYou"}))
#修改节点属性
change_node_properties(result_nodes,{"connectionString":"UwreW/Obe4fGk2CFW4uE6iZWaPAVn0nePXIrtNRApxEGLv6SHetFg6b%2BMLFhg9myAr2EI2b3FgHtKHOKVcjz5DPoV8%2BMAvpzqlEZP2JZqrVEofP3AulFUZbTLfmndYFRqIytlxSCeHr2A79EWHH9/xg0eSgsdvWd"})
##2.属性修改
##A.找到父节点
#nodes=find_nodes(tree,"processers/processer")
##B.通过属性准确定位子节点
#result_nodes=get_node_by_keyvalue(nodes,{"name":"BProcesser"})
##C.修改节点属性
#change_node_properties(result_nodes,{"age":"1"})
##D.删除节点属性
#change_node_properties(result_nodes,{"value":""},True)
#
##3.节点修改
##A.新建节点
#a=create_node("person",{"age":"15","money":"200000"},"thisisthefirestcontent")
##B.插入到父节点之下
#add_child_node(result_nodes,a)
#
##4.删除节点
##定位父节点
#del_parent_nodes=find_nodes(tree,"processers/services/service")
##准确定位子节点并删除之
#target_del_node=del_node_by_tagkeyvalue(del_parent_nodes,"chain",{"sequency":"chain1"})
#
##5.修改节点文本
##定位节点
#text_nodes=get_node_by_keyvalue(find_nodes(tree,"processers/services/service/chain"),{"sequency":"chain3"})
#change_node_text(text_nodes,"newtext")
#
##6.输出到结果文件
write_xml(tree,"new.config")
config_file_rw("new.config")
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python操作xml数据技巧总结》、《Python数据结构与算法教程》、《PythonSocket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。