Python配置XML配置檔案

2021-10-04 12:52:10 字數 4094 閱讀 7384

# !/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...