#!/usr/bin/env python3.5
# -*- coding:utf8 -*-
from xml.etree.ElementTree import ElementTree,Element def read_xml(in_path):
"""
读取并解析XML文件
:param in_path: XML路径
:return:
"""
tree = ElementTree()
tree.parse(in_path)
return tree
def write_xml(tree,out_path):
"""
将XML文件写出
:param tree:
:param out_path:写出路径
:return:
"""
tree.write(out_path,encoding="utf-8",xml_declaration=True)
def if_match(node,kv_map):
"""
判断某个节点是否包含所有传入参数属性
:param node: 节点
:param kv_map: 属性及属性值组成的MAP
:return:
"""
for key in kv_map:
if node.get(key) != kv_map.get(key):
return False
return True
def find_nodes(tree,path):
"""
查找某个路径匹配的所有节点
:param tree:XML树
:param path:节点路径
:return:
"""
return tree.findall(path)
def get_node_by_keyvalue(nodelist,kv_map):
"""
根据属性及属性值定位符合的节点,返回节点
:param nodelist: 节点列表
:param kv_map: 匹配属性及属性值MAP
:return:
"""
result_nodes =[]
for node in nodelist:
if if_match(node,kv_map):
result_nodes.append(node)
return result_nodes
def change_node_properties(nodelist,kv_map,is_delete =False):
"""
修改、增加、删除 节点的属性及属性值
:param nodelist: 节点列表
:param kv_map: 属性及属性值MAP
:param is_delete:
:return:
"""
for node in nodelist:
for key in kv_map:
if is_delete:
if key in node.attrib:
del node.attrib[key]
else:
node.set(key,kv_map.get(key))
def change_node_text(nodelist,text,is_add=False,is_delete=False):
"""
改变、增加、删除一个节点的文本
:param nodelist: 节点列表
:param text: 更新后的文本
:param is_add:
:param is_delete:
:return:
"""
for node in nodelist:
if is_add:
node.text += text
elif is_delete:
node.text = ""
else:
node.text = text
def create_node(tag,property_map,content):
"""
新造一个节点
:param tag:节点标签
:param property_map:属性及属性值MAP
:param content: 节点闭合标签里的文件内容
:return:新节点
"""
element =Element(tag,property_map)
element.text =content
return element
def add_child_node(nodelist,element):
"""
给一个节点添加子节点
:param nodelist: 节点列表
:param element: 子节点
:return:
"""
for node in nodelist:
node.append(element)
def del_node_by_tagkeyvalue(nodelist,tag,kv_map):
"""
同过属性及属性值定位一个节点,并删除之
:param nodelist: 父节点列表
:param tag: 子节点标签
:param kv_map: 属性及属性值列表
:return:
"""
for parent_node in nodelist:
childree = parent_node.getchildren()
for child in childree:
if child.tag == tag and if_match(child,kv_map):
parent_node.remove(child)
def config_file_rw(file):
"""
对XML配置文件进行修复以满足适应IIS
:param file: 目标文件
:return:
"""
import re
x =re.compile("<ns0:")
y = re.compile("</ns0:")
z = re.compile("xmlns:ns0")
with open(file,"r",encoding="utf-8") as f:
txt = f.readlines()
for i, line in enumerate(txt):
if x.search(line):
txt[i] = x.sub("<", line)
elif y.search(line):
txt[i] = y.sub("</", line)
elif z.search(line):
txt[i] = "<configuration>\n"
with open(file,"w",encoding="utf-8") as fw:
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"}, "this is the firest content")
# #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, "new text")
#
# #6. 输出到结果文件
write_xml(tree, "new.config")
config_file_rw("new.config")

python3.5 修改 IIS WEB.CONFIG的相关方法的更多相关文章

  1. linux网站配置文件.htaccess伪静态转换到IIS web.config中

    linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换.   此办法只适合于linux下的php网站放到Windows服务器IIS下,网站除了主页面正常以外子页面 ...

  2. win10 IIS web.config加密不能访问:打不开 RSA 密钥容器

    C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 找到密钥文件, 根据时间判断具体是哪一个文件,赋予network service读权限

  3. IIS 之 通过 Web.config 修改文件上传大小限制设置方法

    在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...

  4. 修改web.config来开启Gzip压缩

    IIS 7.0之后引入的一个IIS配置文件,详细内容参考官方链接http://www.iis.net/learn/get-started /planning-your-iis-architecture ...

  5. WCF 4.0 如何编程修改wcf配置,不使用web.config静态配置

    How to programmatically modify WCF without web.config setting WCF 4.0 如何编程修改wcf配置,不使用web.config静态配置 ...

  6. IIS服务器与web.config配置优化指南

    摘自: http://www.3lian.com/edu/2012/11-13/43890.html .修改IIS最大工作进程数 a. 请考虑以下几点: .每一个工作进程都会消耗系统资源和CPU占用率 ...

  7. [Windows Server 2008] IIS配置伪静态方法(Web.config模式的IIS rewrite)

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装伪静态(w ...

  8. 最近上传图片上传文件报413错误及仅Https下报413问题,IIS高版本的配置方案及Web.config配置全解

    IIS文件上传大小限制30M,C盘中有的IIS_schema.xml文件 C:\Windows\System32\inetsrv\config\schema\ 但是考虑到安全等问题,而且这个文件默认是 ...

  9. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

随机推荐

  1. Visual Studio 2013 Use HTTPS (SSL) On Web Application Projects

    公司调试HTTPS接口会用到,原文:http://www.codeproject.com/Tips/766918/Visual-Studio-Use-HTTPS-SSL-On-Web-Applicat ...

  2. Jquery Validate 表单验证的多种方式

    ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...

  3. boost------signals2的使用1(Boost程序库完全开发指南)读书笔记

    signals2基于Boost的另一个库signals,实现了线程安全的观察者模式.在signals2库中,观察者模式被称为信号/插槽(signals and slots),他是一种函数回调机制,一个 ...

  4. KMP算法详解-- 转自Matrix67

       6 7 8 9 --    A = a b a b  6 7  7 8 9 --    A = a b a b a  5 6 7  8 9 --    A = a b a b a b  6 7 ...

  5. 浅谈DevExpress<一>:换肤

    最近要用到devExpress,一句话,很好很强大,比起vs自带的winform界面,种类和花样要多了不少,然而,强力的功能带来了庞大的信息量,所以我打算通过一些小模块来和大家一起对它进行探讨和研究. ...

  6. Dirichlet's Theorem on Arithmetic Progression

    poj3006 Dirichlet's Theorem on Arithmetic Progressions 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. ...

  7. CLR 的执行模型(2)

    第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...

  8. PHP gbk转换成utf8

    /** * GBK ASCII 转换成utf8 */ public function to_utf8($str){ $detect = array('ASCII', 'GBK', 'UTF-8'); ...

  9. Xcode5和ObjC新特性

    Welcome to Xcode 5 这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或使用,但是还烦请保留原文链接,谢谢您的 ...

  10. 我的第一篇文章 —— IE6的那些css常见bug(汇总)

    我的微博终于在前几天建立了 虽说很早之前就知道博客园这个地方 但怕自己不能坚持去写一些东西一直没有建.这几天 我做了这个决定 把我的博客建起来 每周发一些看到的,听到了一些前端知识或者前沿技术. 另外 ...