使用minidom来处理XML的示例(二)--XML的写入

python解析xml文件(解析、更新、写入) Overview 这篇博客内容将包括对XML文件的解析、追加新元素后写入到XML,以及更新原XML文件中某结点的值。使用的是python的xml.dom.minidom包,详情可见其官方文档:xml.dom.minidom官方文档。全文都将围绕以下的customer.xml进行操作: <?xml version="1.0" encoding="utf-8" ?> <!-- Thi... 阅读详情

原文地址:

http://blog.donews.com/limodou/archive/2004/07/15/43609.aspx

http://blog.donews.com/limodou/archive/2004/07/15/43755.aspx

 

在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容。在缺省情况下都是用XML格式保存的。下面我讲述一下,如何使用minidom来读取和保存XML文件。

下面是片段分类的一个示例文件--catalog.xml

<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <maxid>4</maxid>
    <item id="1">
        <caption>Python</caption>
        <item id="4">
            <caption>测试</caption>
        </item>
    </item>
    <item id="2">
        <caption>Zope</caption>
    </item>
</catalog>

分类是树状结构,显示出来可能为:

Python
    测试
Zope

先简单介绍一下XML的知识,如果你已经知道了可以跳过去。

1. XML文档的编码

此 XML文档的编码为utf-8,因此你看到的“测试”其实是UTF-8编码。在XML文档的处理中都是使用UTF-8编码进行的,因此,如果你不写明 encoding的话,都是认为文件是UTF-8编码的。在Python中,好象只支持几种编码,象我们常用的GB2312码就不支持,因此建议大家在处 理XML时使用UTF-8编码。

2. XML文档的结构

XML文档有XML头信息和XML信息体。头信息如:

<?xml version="1.0" encoding="utf-8"?>

它表明了此XML文档所用的版本,编码方式。有些复杂的还有一些文档类型的定义(DOCTYPE),用于定义此XML文档所用的DTD或Schema和一些实体的定义。这里并没有用到,而且我也不是专家,就不再细说了。

XML信息体是由树状元素组成。每个XML文档都有一个文档元素,也就是树的根元素,所有其它的元素和内容都包含在根元素中。

3. DOM

DOM是Document Object Model的简称,它是以对象树来表示一个XML文档的方法,使用它的好处就是你可以非常灵活的在对象中进行遍历。

4. 元素和结点

元素就是标记,它是成对出现的。XML文档就是由元素组成的,但元素与元素之间可以有文本,元素的内容也是文本。在minidom中有许多的结点,元素也属于结点的一种,它不是叶子结点,即它存在子结点;还存在一些叶子结点,如文本结点,它下面不再有子结点。

象 catalog.xml中,文档元素是catalog,它下面有两种元素:maxid和item。maxid用来表示当前最大的item的id值。每一个 item都有一个id属性,id属性是唯一的,在 NewEdit 中用来生成每个分类所对应的代码片段的XML文档名,因此不能重复,而且它是一个递增的值。item元素有一个caption子元素,用来表示此分类项的 名称,它还可以包含item元素。这样,就定义了一个树状XML结构,下面让我们看一看如果把它们读出来。


一、得到dom对象

>>> import xml.dom.minidom
>>> dom = xml.dom.minidom.parse('d:/catalog.xml')

这样我们得到了一个dom对象,它的第一个元素应该是catalog。

二、得到文档元素对象

>>> root = dom.documentElement

这样我们得到了根元素(catalog)。

三、结点属性

每一个结点都有它的nodeName,nodeValue,nodeType属性。nodeName为结点名字。

>>> root.nodeName
u'catalog'

nodeValue是结点的值,只对文本结点有效。nodeType是结点的类型,现在有以下几种:

'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'

这些结点通过名字很好理解。catalog是ELEMENT_NODE类型。

>>> root.nodeType
1
>>> root.ELEMENT_NODE
1

四、子元素、子结点的访问

访问子元素、子结点的方法很多,对于知道元素名字的子元素,可以使用getElementsByTagName方法,如读取maxid子元素:

>>> root.getElementsByTagName('maxid')
[<DOM Element: maxid at 0xb6d0a8>]

这样返回一个列表,由于我们的例子中maxid只有一项,因此列表也只有一项。

如果想得到某个元素下的所有子结点(包括元素),可以使用childNodes属性:

>>> root.childNodes
[<DOM Text node "/n    ">, <DOM Element: maxid at 0xb6d0a8>, <DOM Text node "/n    ">, <DOM Element: item at 0xb6d918>, <DOM Text node "/n    ">, <DOM Element: item at 0xb6de40>, <DOM Text node "/n    ">, <DOM Element: item at 0xb6dfa8>, <DOM Text node "/n">]

可以看出所有两个标记间的内容都被视为文本结点。象每行后面的回车, 都被看到文本结点。从上面的结果我们可以看出每个结点的类型,本例中有文本结点和元素结点;结点的名字(元素结点);结点的值(文本结点)。每个结点都是 一个对象,不同的结点对象有不同的属性和方法,更详细的要参见文档。由于本例比较简单,只涉及文本结点和元素结点。

getElementsByTagName可以搜索当前元素的所有子元素,包括所有层次的子元素。childNodes只保存了当前元素的第一层子结点。

这样我们可以遍历childNodes来访问每一个结点,判断它的nodeType来得到不同的内容。如,打印出所有元素的名字:

>>> for node in root.childNodes:
    if node.nodeType == node.ELEMENT_NODE:
        print node.nodeName
       
maxid
item
item

对于文本结点,想得到它的文本内容可以使用: .data属性。

对于简单的元素,如:<caption>Python</caption>,我们可以编写这样一个函数来得到它的内容(这里为Python)。

def getTagText(root, tag):
    node = root.getElementsByTagName(tag)[0]
    rc = ""
    for node in node.childNodes:
        if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):
            rc = rc + node.data
    return rc

这个函数只处理找到的第一个符合的子元素。它会将符合的第一个子元素中的所有文本结点拼在一起。当nodeType为文本类结点时,node.data为文本的内容。如果我们考查一下元素caption,我们可能看到:

[<DOM Text node "Python">]

说明caption元素只有一个文本结点。

如果一个元素有属性,那么可以使用getAttribute方法,如:

>>> itemlist = root.getElementsByTagName('item')
>>> item = itemlist[0]
>>> item.getAttribute('id')
u'1'

这样就得到了第一个item元素的属性值。

下面让我们简单地小结一下如何使用minidom来读取XML中的信息

1. 导入xml.dom.minidom模块,生成dom对象
2. 得到文档对象(根对象)
3. 通过getElementsByTagName()方法和childNodes属性(还有其它一些方法和属性)找到要处理的元素
4. 取得元素下文本结点的内容

 

下面我来演示一下如何从无到有生成象catalog.xml一样的XML文件。

一、生成dom对象

>>> import xml.dom.minidom
>>> impl = xml.dom.minidom.getDOMImplementation()
>>> dom = impl.createDocument(None, 'catalog', None)

这样就生成了一个空的dom对象。其中catalog为文档元素名,即根元素名。

二、显示生成的XML内容

每一个dom结点对象(包括dom对象本身)都有输出XML内容的方法,如:toxml(), toprettyxml()

toxml()输出紧凑格式的XML文本,如:

<catalog><item>test</item><item>test</item></catalog>

toprettyxml()输出美化后的XML文本,如:

<catalog>
    <item>
        test
    </item>
    <item>
        test
    </item>
</catalog>

可以看出,它是将每个结点后面都加入了回车符,并且自动处理缩近。但对于每一个元素,如果元素只有文本内容,则我希望元素的tag与文本是在一起的,如:

<item>test</item>

而不想是分开的格式,但minidom本身是不支持这样的处理。关于如何实现形如:

<catalog>
    <item>test</item>
    <item>test</item>
</catalog>

这样的XML格式,后面我们再说。

三、生成各种结点对象

dom对象拥有各种生成结点的方法,下面列出文本结点,CDATA结点和元素结点的生成过程。

1. 文本结点的生成

>>> text=dom.createTextNode('test')
test

要注意的是,在生成结点时,minidom并不对文本字符进行检查,象文本中如果出现了'<','&'之类的字符,应该转换为相应的实体符号'&lt;','&amp;'才可以,这里没有做这个处理。

2. CDATA结点的生成

>>> data = dom.createCDATASection('aaaaaa/nbbbbbb')
>>> data.toxml()
'<![CDATA[aaaaaa/nbbbbbb]]>'

CDATA 是用于包括大块文本,同时可以不用转换'<','&'字符的标记,它是用<![CDATA[文本]]>来包括的。但文本中不可 以有"]]>"这样的串存在。生成结点时minidom不作这些检查,只有当你输出时才有可能发现有错。

3. 元素结点的生成

>>> item = dom.createElement('caption')
>>> item.toxml()
'<caption/>'

对 于象元素这样的结点,生成的元素结点其实是一个空元素,即不包含任何文本,如果要包含文本或其它的元素,我们需要使用appendChild()或 insertBefore()之类的方法将子结点加就到元素结点中。如将上面生成的text结点加入到caption元素结点中:

>>> item.appendChild(text)
<DOM Text node "test">
>>> item.toxml()
'<caption>test</caption>'

使用元素对象的setAttribute()方法可以向元素中加入属性,如:

>>> item.setAttribute('id', 'idvalue')
>>> item.toxml()
'<caption id="idvalue">test</caption>'

四、生成dom对象树

我 们有了dom对象,又知道了如何生成各种结点,包括叶子结点(不包含其它结点的结点,如文本结点)和非叶子结点(包含其它结点的结点,如元素结点)的生 成,然后就需要利用结点对象本身的appendChild()或insertBefore()方法将各个结点根据在树中的位置连起来,串成一棵树。最后要 串到文档结点上,即根结点上。如一个完整的示例为:

>>> import xml.dom.minidom
>>> impl = xml.dom.minidom.getDOMImplementation()
>>> dom = impl.createDocument(None, 'catalog', None)
>>> root = dom.documentElement
>>> item = dom.createElement('item')
>>> text = dom.createTextNode('test')
>>> item.appendChild(text)
<DOM Text node "test">
>>> root.appendChild(item)
<DOM Element: item at 0xb9cf80>
>>> print root.toxml()
<catalog><item>test</item></catalog>

五、简单生成元素结点的函数

下面是我写的一个小函数,用于简单的生成类似于:

<caption>test</caption>

或形如:

<item><![CDATA[test]]></item>

的元素结点

1       def makeEasyTag(dom, tagname, value, type='text'):
2           tag = dom.createElement(tagname)
3           if value.find(']]>') > -1:
4               type = 'text'
5           if type == 'text':
6               value = value.replace('&', '&amp;')
7               value = value.replace('<', '&lt;')
8               text = dom.createTextNode(value)
9           elif type == 'cdata':
10              text = dom.createCDATASection(value)
11          tag.appendChild(text)
12          return tag

参数说明:

  • dom为dom对象
  • tagname为要生成元素的名字,如'item'
  • value为其文本内容,可以为多行
  • type为文本结点的格式,'text'为一般Text结点,'cdata'为CDATA结点

函数处理说明:

  • 首先创建元素结点
  • 查找文本内容是否有']]>',如果找到,则此文本结点只可以是Text结点
  • 如果结点类型为'text',则对文本内容中的'<'替换为'&lt;','&'替换为'&amp;',再生成文本结点
  • 如果结点类型为'cdata',则生成CDATA结点
  • 将生成的文本结点追加到元素结点上

因此这个小函数可以自动地处理字符转化及避免CDATA结点中出现']]>'串。

上面生成'item'结点的语句可以改为:

>>> item = makeEasyTag(dom, 'item', 'test')
>>> item.toxml()
'<item>test</item>'

六、写入到XML文件中

dom对象树已经生成好了,我们可以调用dom的writexml()方法来将内容写入文件中。writexml()方法语法格式为:

writexml(writer, indent, addindent, newl, encoding)

  • writer是文件对象
  • indent是每个tag前填充的字符,如:'  ',则表示每个tag前有两个空格
  • addindent是每个子结点的缩近字符
  • newl是每个tag后填充的字符,如:'/n',则表示每个tag后面有一个回车
  • encoding是生成的XML信息头中的encoding属性值,在输出时minidom并不真正进行编码的处理,如果你保存的文本内容中有汉字,则需要自已进行编码转换。

writexml方法是除了writer参数必须要有外,其余可以省略。下面给出一个文本内容有汉字的示例:

1       >>> import xml.dom.minidom
2       >>> impl = xml.dom.minidom.getDOMImplementation()
3       >>> dom = impl.createDocument(None, 'catalog', None)
4       >>> root = dom.documentElement
5       >>> text = unicode('汉字示例', 'cp936')
6       >>> item = makeEasyTag(dom, 'item', text)
7       >>> root.appendChild(item)
8       <DOM Element: item at 0xb9ceb8>
9       >>> root.toxml()
10      u'<catalog><item>/u6c49/u5b57/u793a/u4f8b</item></catalog>'
11      >>> f=file('d:/test.xml', 'w')
12      >>> import codecs
13      >>> writer = codecs.lookup('utf-8')[3](f)
14      >>> dom.writexml(writer, encoding='utf-8')
15      >>> writer.close()

5行 因为XML处理时内部使用Unicode编码,因此象汉字首先要转成Unicode,如果你不做这一步minicode并不检查,并且保存时可能不会出错。但读取时可能会出错。
12-13行 生成UTF-8编码的写入流对象,这样在保存时会自动将Unicode转换成UTF-8编码。

这样写XML文件就完成了。

Python与XML文件处理详解(2):使用xml.dom.minidom模块处理XML 本文摘要: 《Python minidom处理XML与ARXML指南》深入讲解了标准库xml.dom.minidom模块的使用。文章分为四部分:1) 解析DOM模型核心概念及minidom适用场景;2) 详细API教程,包括解析/遍历/修改XML文档;3) 处理复杂XML如ARXML的实践方法;4) 总结minidom优劣势。重点对比了minidom与ElementTree的差异,特别强调minidom在标准兼容性、精确控制方面的优势,同时指出其内存效率低、API冗长等不足。针对ARXML处理,提供了命名空 阅读详情

相关推荐

python minidom xml读写

文章目录前言minidom 使用xml读取遍历获取元素替换元素的文本内容Dom写入至新的xml中整体示例 前言   近日工作中,遇到了一个场景———需要对xml文件中所有元素的文本内容替换为空,并导出为新的xml。手动替换着实是耗费时间,可以采用python minidom对xml读写进行批量操作。本文主要针对这样的简单的使用场景做分享。   PS||: xml长这样: <?xml version="1.0" encoding="UTF-8"?> <ROOT> <!--

qq_35980805的博客 691

Python minidom模块(DOM写入和解析XML)

一、DOM写XML文件 #导入minidom from xml.dom import minidom # 1.创建DOM树对象 dom=minidom.Document() # 2.创建根节点。每次都要用DOM对象来创建任何节点。 root_node=dom.createElement('root') # 3.用DOM对象添加根节点 ...

程序就是世界 678

Python读取、写入、修改、删除xml文件内容

本人在工作中需要读写xml文件,看到大多是C++实现的,本人对于Python语言比较熟悉,想使用Python实现一下。Python读取xml文件有多种方式,其中一种是使用包xml.dom.minidom,这个包的官方文档地址为:https://docs.python.org/3/library/xml.dom.minidom.html 这个地址上面有API接口参数说明。我这里大概说一下读取、写入...

skj1995的博客 1万+

python生成xml

 from: http://blog.csdn.net/fhl812432059/article/details/51647529 dom写xml 1.引入包 import xml.dom.minidom 2.writexml方法 writexm...

qq_40239482的博客 872

python对 xml 格式文件操作之 minidom (附简易解决方案 1.minidom读取后写入多余空行问题 2. 标签内属性自动排序问题 3. import 导包报错)

文章目录1. minidom 基础操作1.1 minidom 生成 xml 文件操作1.2 minidom 解析 xml 文件操作2. minidom在写入中存在的问题2.1 xml 文件时标签内属性排序问题2.2 生成 使用 minidom 读取节点后用节点写入时多余空行问题2.3 上述两个问题的解决方案, 在使用前重新封装写入文件的函数 1. minidom 基础操作 1.1 minidom 生成 xml 文件操作 1.2 minidom 解析 xml 文件操作 2. minidom在写入中存在的问题

Nzyr_Lizyx的博客 3861

Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法

这篇文章主要介绍了Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件,封装函数的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 总结了一下使用Python对xml文件的解析,用到的模块儿如下: 分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段。 from xml.dom.minidom impor...

python编程基础教程 4328

python之minidom读写xml

一、写xml文件生成dom对象&gt;&gt;&gt; import xml.dom.minidom &gt;&gt;&gt; impl = xml.dom.minidom.getDOMImplementation() &gt;&gt;&gt; dom = impl.createDocument(None, 'catalog', None) &gt;&gt;&gt; root = dom.docu...

咬手指的apple 6860

掌握Python中处理XML的库:ElementTree、lxml、minidom等

在当前的IT行业中,XML(可扩展标记语言)仍然在数据交换、配置文件以及网络服务等多个领域扮演着重要角色。Python作为一种广泛应用的编程语言,提供了多种库来支持XML处理,使得开发者能够更加便捷和高效地处理XML数据。本章将对Python中常用的XML处理库进行概述,包括它们的特性和适用场景,为读者选择合适的库提供参考。

weixin_35370061的博客 1248

使用xml.dom.minidom创建并写入xml文件

# 得到dom对象,test为根元素 imp = minidom.getDOMImplementation() dom = imp.createDocument(None, 'resources', None) # 转化为element实例 root = dom.documentElement person1NameText = doc.createTextNode(stringContent) # 创...

丿灬安之若死 878

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 543

[Python学习]使用minidom来处理XML的示例 (二)–XML的写入

下面我来演示一下如何从无到有生成象catalog.xml一样的XML文件。一、生成dom对象>>> import xml.dom.minidom>>> impl = xml.dom.minidom.getDOMImplementation()>>> dom = impl.createDocument(None, ‘catalog’, None)这样就生成了一

zhangj1012003_2007的专栏 1949

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5424

使用minidom来处理XML的示例

下面我来演示一下如何从无到有生成象catalog.xml一样的XML文件。一、生成dom对象>>> import xml.dom.minidom>>> impl = xml.dom.minidom.getDOMImplementation()>>> dom = impl.createDocument(None, catalog, None)这样就生成了一个空的dom对象。其中c

1017

Cursor AI对话历史丢失?开源工具一键恢复项目聊天记录

在软件开发中,数据持久化与工作区管理是保障开发效率与上下文连续性的基础技术。其核心原理在于通过文件系统路径、数据库存储等机制,将应用状态与用户数据持久化关联。对于依赖AI辅助编程的开发者而言,对话历史是宝贵的项目上下文资产,记录了关键的算法思路、API使用范例和问题解决方案。然而,当开发工具(如基于VS Code的Cursor)采用基于项目绝对路径的工作区隔离机制时,项目路径的变更会导致历史对话看似“丢失”,实则是被隔离在了旧路径对应的数据沙箱中。这直接影响了开发体验与知识沉淀的效率。cursor-chat

weixin_26775679的博客 828

【论文阅读笔记】One Shot 3D Photography

论文主页:https://facebookresearch.github.io/one_shot_3d_photography/ 代码地址:https://github.com/facebookresearch/one_shot_3d_photography   该3D照片方向,由于刚入门,所以会倾向于翻译文章。每个操作上的选择,及为什么不进行另外操作的原因都如数放上。 论文小结   本作的工作是从单张RGB图片生成一个移动视角的3D照片。   其管道大致如下: 由RGB图像通过单目深度估计网络估计深度图

时光机 °的博客 1839

Python xml.dom.minidom 模块:简易 XML 处理教程

是 Python 标准库中的一部分,属于 Document Object Model(DOM)的简化实现。DOM 把 XML 文档表示为树形结构,其中每个节点可以是元素、属性、文本等。minidom提供了易于使用的接口,让开发者可以方便地操作这个树形结构。模块为 Python 开发者提供了一种简单的方式来处理 XML 文档。它通过 DOM 模型将 XML 文档表示为树形结构,使得开发者可以方便地进行解析、创建、修改和删除操作。然而,由于其将整个文档加载到内存中,在处理大型 XML 文档时可能会受到性能限制。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1163

8-bit量化在YOLOv11中的部署实践-(使用PTQ、QAT量化技术实现模型体积压缩和推理加速)

本文系统介绍了YOLOv11模型量化技术,主要包括三个核心部分:首先阐述模型量化的基础理论,包括量化分类、数学原理和性能影响;其次分析YOLOv11架构特点及其量化敏感层;最后详细讲解训练后量化(PTQ)的具体实现流程。研究表明,8-bit量化可使YOLOv11模型大小缩减至1/4,推理速度提升1.7-2.3倍,精度损失控制在1%以内。文章特别强调了校准算法选择(如最小最大值法和KL散度法)对量化效果的关键影响,并提供了完整的代码实现示例,为YOLOv11的高效部署提供实用指导。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1626

python中使用minidom操作xml命令

整理一下在个人使用的一些有关的minidom操作xml的命令,备查 读取xml文件 1、引入minidom类 from xml.dom import minidom 2、获取xml文件并得到文档元素对象 path=minidom.parse('文件名称') root=path.documentElement 3、通过元素名字的获取子元素 itemlist=root.ge

dylyq1104的专栏 1638

制作3D地形图的方法-使用GlobalMapper和3ds Max软件

打开GlobalMapper软件,在菜单栏中选择“文件”>“打开数据文件”,然后选择相应的高程数据文件。在菜单栏中选择“渲染”>“渲染设置”,根据需要进行设置,如分辨率和输出格式。选择地形对象,点击菜单栏中的“渲染”>“材质编辑器”,然后根据需要调整材质属性,如颜色、纹理和光照等。在菜单栏中选择“工具”>“高程栅格和网格”>“创建地形网格”。在菜单栏中选择“文件”>“导出”>“导出栅格格式”。打开3ds Max软件,在菜单栏中选择“文件”>“导入”,然后选择之前导出的地形数据文件。步骤3:导出地形网格。

JqlScala的博客 1535

带洞多边形如何分成凸多边形集合,对多边形进行凸分解?

摘要: 凸分解是计算几何中的经典问题,分为三角化和凸分解两种方法。三角化将带洞多边形转换为简单多边形并分割为三角形,常用算法包括耳剪法、单调多边形三角化等。凸分解则生成更少但更大的凸多边形,常用Hertel-Mehlhorn算法或基于凹点的递归切割。实际应用中建议使用CGAL、Poly2Tri等成熟库处理。三角化适合图形渲染,凸分解更适用于物理引擎和路径规划。关键步骤包括数据校验、选择合适的算法及后处理优化。

插件开发 354

python xml文件读写使用之xml.dom.minidom

XML文件读写xml结构xml和dom读取指定字符串写xml文件 xml结构 xml的结果性关系包括节点关系及属性内容 xml的基本单位是元素,开始标记,属性,结束标记组成 〈?xml version="1.0" encoding="gb2312" ?〉   〈参考资料〉    〈书籍〉    〈名称〉xml入门精解〈/名称〉    〈作者〉张三〈/作者〉    〈价格 货币单位="人民币"〉20.00〈/价格〉    〈/书籍〉    〈书籍〉    〈名称〉xml

Potential 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python3使用minidom读写xml文件

前言 python使用minidom处理xml还是比较麻烦的,网上很多资料都是断断续续的一部分,不成体统。这里写一个demo,把常用xml解析操作:读写文件、解析节点、添加节点、解析属性、添加属性、解析节点值和修改节点值等,都包含进来的。供各位读者参考 实现 demo实现的功能是从input.xml文件中读取xml并协议,将解析内容输出,然后再将内容组装成xml写进output.xml文件中。 input.txt文件内容如下: <school> <class>

聆听风雨的博客 1627

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python post xml_使用minidom来处理XML的示例(Python 学习)(转载)

作者网站:http://www.donews.net/limodou/archive/2004/07/15/43609.aspx一.XML的读取.在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容。在缺省情况下都是用XML格式保存的。下面我讲述一下,如何使用minidom来读取和保存XML文件。下面是片段分类的一个示例文件--catalog.xml4Python测试Zope...

weixin_39948111的博客 159

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 学习TCP阻塞/非阻塞
下一篇: 一行逻辑错误,但语法没有错误的代码
JGood
博客等级 码龄20年 498粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值