python 生成 xml

from xml.dom.minidom import Document
from Endcode.common.log_rule import log

class GenerateXML:
    def __init__(self):
        self.doc = Document()
        self.annotation = None

    def write_node(self, node_name, node_value):
        node = self.doc.createElement(node_name)
        node_texts = self.doc.createTextNode(node_value)
        node.appendChild(node_texts)
        return node

    def writefile(self, filename):
        try:
            with open(filename, 'w', encoding='UTF-8') as f:
                self.doc.writexml(f, indent='',addindent='\t',newl='\n',encoding='UTF-8')
        except Exception as e:
            log.error(f"writefile error is : {str(e)}")

    def writeXml(self, filename):
        try:
            self.annotation = self.doc.createElement('annotation')
            node_folder = self.write_node(node_name="folder", node_value="folder")
            node_filenames = self.write_node(node_name="filename", node_value="文件名")
            size = self.size_node
            node_object = self.node_object

            self.doc.appendChild(self.annotation)
            self.annotation.appendChild(node_folder)
            self.annotation.appendChild(node_filenames)
            self.annotation.appendChild(size)
            self.annotation.appendChild(node_object)
            self.writefile(filename)
        except Exception as e:
            log.error(f"writeXml error is : {str(e)}")

    def size_node(self):
        node_width = self.write_node(node_name="width", node_value="宽")
        node_height = self.write_node(node_name="height", node_value="高")
        node_depth = self.write_node(node_name="depth", node_value="depth")

        size = self.doc.createElement('size')
        size.appendChild(node_width)
        size.appendChild(node_height)
        size.appendChild(node_depth)
        return size

    
    def bndbox(self):
        node_P1 = self.write_node(node_name="P1", node_value="(777, 403)")
        node_P2 = self.write_node(node_name="P2", node_value="(777, 403)")
        node_P3 = self.write_node(node_name="P3", node_value="(777, 403)")
        node_P4 = self.write_node(node_name="P4", node_value="(777, 403)")
        
        bndbox = self.doc.createElement('bndbox')
        bndbox.appendChild(node_P1)
        bndbox.appendChild(node_P2)
        bndbox.appendChild(node_P3)
        bndbox.appendChild(node_P4)
        return bndbox


    def node_object(self):
        node_name = self.write_node(node_name="name", node_value="label_value")
        node_ID = self.write_node(node_name="ID", node_value="ID")
        node_bndbox = self.bndbox()

        objects = self.doc.createElement('object')
        objects.appendChild(node_name)
        objects.appendChild(node_ID)
        objects.appendChild(node_bndbox)
        return objects
要使用Python生成XML文件,可以使用xml.dom.minidom模块或xml.etree.ElementTree模块。 在xml.dom.minidom模块中,可以使用Document类来创建XML文档对象,然后使用createElement()、appendChild()和createTextNode()等方法来创建元素和文本节点,并将它们添加到文档中。最后,可以使用toprettyxml()方法将文档格式化为字符串或将其写入文件。以下是一个使用xml.dom.minidom模块创建XML文件的示例代码: ```python from xml.dom.minidom import Document doc = Document() root = doc.createElement("root") doc.appendChild(root) element = doc.createElement("element") text = doc.createTextNode("This is a test!") element.appendChild(text) root.appendChild(element) xml_str = doc.toprettyxml(indent=" ") with open("output.xml", "w") as f: f.write(xml_str) ``` 在xml.etree.ElementTree模块中,可以使用ElementTree类来创建XML文档对象,然后使用Element()和SubElement()等方法来创建元素,并使用text属性设置元素的文本内容。最后,可以使用ElementTree的write()方法将文档写入文件。以下是一个使用xml.etree.ElementTree模块创建XML文件的示例代码: ```python import xml.etree.ElementTree as ET root = ET.Element("root") element = ET.SubElement(root, "element") element.text = "This is a test!" tree = ET.ElementTree(root) tree.write("output.xml") ``` 以上是两种常用的方法来生成XML文件的示例代码。你可以根据自己的需求选择其中一种方法来使用。 #### 引用[.reference_title] - *1* [怎么用python创建文件-如何用Python创建生成xml文档文件的方法](https://blog.csdn.net/weixin_37988176/article/details/109417617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python学习(十四):Python如何创建一个xml文件](https://blog.csdn.net/weixin_43580890/article/details/129343510)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值