python使用etree写回文件出现nso,ns1前缀问题

tech2022-09-21  65

**

代码

**

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')

最新回复(0)