# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:rache
# date:2020/3/19 22:02
# desc: tomcat元件配置初始化,適用版本 apache-tomcat-9.0.33
from xml.etree.elementtree import elementtree, element
defread_xml
(in_path)
:'''讀取並解析xml檔案
in_path: xml路徑
return: elementtree'''
tree = elementtree(
) tree.parse(in_path)
return tree
defwrite_xml
(tree, out_path)
:'''將xml檔案寫出
tree: xml樹
out_path: 寫出路徑'''
tree.write(out_path, encoding=
"utf-8"
, xml_declaration=
true
)def
if_match
(node, kv_map)
:'''判斷某個節點是否包含所有傳入引數屬性
node: 節點
kv_map: 屬性及屬性值組成的map'''
for key in kv_map:
if node.get(key)
!= kv_map.get(key)
:return
false
return
true
# ---------------search -----
deffind_nodes
(tree, path)
:'''查詢某個路徑匹配的所有節點
tree: xml樹
path: 節點路徑'''
return tree.findall(path)
defget_node_by_keyvalue
(nodelist, kv_map)
:'''根據屬性及屬性值定位符合的節點,返回節點
nodelist: 節點列表
kv_map: 匹配屬性及屬性值map'''
result_nodes =
for node in nodelist:
if if_match(node, kv_map)
:return result_nodes
# ---------------change -----
defchange_node_properties
(nodelist, kv_map, is_delete=
false):
'''修改/增加 /刪除 節點的屬性及屬性值
nodelist: 節點列表
kv_map:屬性及屬性值map'''
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):
'''改變/增加/刪除乙個節點的文字
nodelist:節點列表
text : 更新後的文字'''
for node in nodelist:
if is_add:
node.text += text
elif is_delete:
node.text =
""else
: node.text = text
defcreate_node
(tag, property_map, content)
:'''新造乙個節點
tag:節點標籤
property_map:屬性及屬性值map
content: 節點閉合標籤裡的文字內容
return 新節點'''
element = element(tag, property_map)
element.text = content
return element
defadd_child_node
(nodelist, element)
:'''給乙個節點新增子節點
nodelist: 節點列表
element: 子節點'''
for node in nodelist:
defdel_node_by_tagkeyvalue
(nodelist, tag, kv_map)
:'''同過屬性及屬性值定位乙個節點,並刪除之
nodelist: 父節點列表
tag:子節點標籤
kv_map: 屬性及屬性值列表'''
for parent_node in nodelist:
children = parent_node.getchildren(
)for child in children:
if child.tag == tag and if_match(child, kv_map)
: parent_node.remove(child)
if __name__ ==
"__main__"
:# 1. 讀取xml檔案
tree = read_xml(
"./server.xml"
)# 2.遍歷節點測試:
root_node=tree.getroot(
)# print("根節點:"+root_node.tag)
# print("根節點屬性:",root_node.attrib)
## for child_node in root_node.iter('service'):
# print(child_node.tag,child_node.attrib)
# 3.server節點修改
server_nodes = get_node_by_keyvalue(find_nodes(tree,
"server"),
) change_node_properties(server_nodes,
)# shutdown 預設埠8005改為8010
# 3.connector節點修改,增加些屬性
# a. 找到父節點
root_node = tree.getroot(
)for node in root_node.
iter
('connector'):
# 節點的標籤名稱和內容
print
(node.tag, node.attrib)
# b. 通過屬性準確定位子節點
connector_nodes = get_node_by_keyvalue(root_node.
iter
('connector'),
) change_node_properties(connector_nodes,
)# 3. host節點修改,關閉熱部署,增加預設專案路徑
host_nodes = get_node_by_keyvalue(root_node.
iter
('host'),
) change_node_properties(host_nodes,
)# a.新建節點
a = create_node(
"context",,
"")# b.插入到父節點之下
add_child_node(host_nodes, a)
# 6. 輸出到結果檔案
write_xml(tree,
"./out.xml"
)
xml mysql配置詳解 xml配置檔案詳解
1 bean的基本屬性配置 注意 在整合struts和hibernate框架時,需要將action的scope設為 prototype 可以配置全域性的自動裝配型別,在beans內,設定default autowire 2,團隊協作開發 import標籤 3 bean的繼承 parent屬性 如果c...
springmvc基於xml配置檔案
web.xml 配置檔案 mvc dispatcher org.springframework.web.servlet.dispatcherservlet contextconfiglocation classpath web inf conf spring servlet.xml 1 spring...
配置檔案 properties和xml
1.2 demo1 從properties配置檔案中取值 2.xml配置檔案 2.2 demo 從xml中獲得獲得第二個聯絡人的姓名 test1 和 從xml中獲得全部聯絡人資訊 test2 properties類繼承了hashtable 的get 方法 返回的是 乙個泛型 即object物件 而g...