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

**

代码

**

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不穿铠甲的穿山甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值