**
代码
**
import xml.etree.ElementTree as ET
import os
class Deal_Xml:
def get_tree_root(self,file_url):
"""
根据文件路径查询根节点集合
:param file_url: 文件路径
:return: 返回实例对象本身用于链式操作
"""
tree = ET.parse(file_url)
root = tree.getroot()
self.root = root
self.tree = tree
return self
def search_tags(self, tag_name):
"""
:param tag_name:需要查询的标签名称
:return: 返回实例对象本身用于链式操作
"""
ln_tags = list();
ln_tag = self.root.iter(tag_name)
while True:
try:
#print(ln_tag)
ln = next(ln_tag)
ln_tags.append(ln)
except StopIteration:
break;
self.ln_tags = ln_tags
return self
def add_Tag_by_classNames(self, class_names):
"""
:param tags:
:param class_names:
:return: 返回实例对象本身用于链式操作
"""
if not class_names is None and len(class_names) > 0:
for tag in self.ln_tags:
if not self.check_has_tag(tag):
if tag.get("lnClass") in class_names:
tag.append(self.get_content_tag())
else:
continue
return self
def get_content_tag(self):
"""
:return: 需要添加的内容
"""
content = '''
<DOI desc="IED设备重启" name="ReStart">
<DAI name="dU">
<Val>IED设备重启123456</Val>
</DAI>
</DOI>
'''
return ET.fromstring(content)
def check_has_tag(self, tag):
"""
检查tag是哦福已经存在
:param tag:tag 名字
:return: 存在返回 True 不存在返回False
"""
doi_arr = tag.findall("DOI")
for doi in doi_arr:
if 'desc' in doi.attrib.keys() and doi.get("desc") == "IED设备重启":
return True
return False
def writeToLocal(self):
"""
写回本地
"""
file_url = os.getcwd() + "\\%s" % "kkk.xml"
try:
outputs = self.tree
self.tree.write(file_url, encoding="UTF-8")
except Exception:
print("写回本地报错")
if "__main__" == __name__:
#获取xml文件路径
file_url = os.getcwd()+"\\%s" % "ICD-ZR-KLJC018-HZKL(ZPEPC_V3.2).icd"
#file_url = os.getcwd() + "\\%s" % "kk.xml"
#获取根节点
lns = Deal_Xml().get_tree_root(file_url).search_tags("LN").add_Tag_by_classNames(('STWD', 'SVBR')).writeToLocal()
解决方案:
添加:ET.register_namespace('', 'http://www.iec.ch/61850/2003/SCL')