- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python使用minidom读写xml的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了Python使用minidom读写xml的方法。分享给大家供大家参考。具体分析如下:
一 python提供的xml支持 。
2种工业标准的xml解析方法-SAX和DOM。SAX(simple API for XML),是基于事件处理的,当XML文档顺序地读入时,每次遇到一个元素会触发相应的事件处理函数来处理。DOM(Document Object Model),通过构建一个树结构来表现整个xml文档,一旦树被构建,可以通过DOM提供了接口来遍历树和提取相应的数据。 python还提供了python独特的xml解析方法,相比于SAX和DOM更容易使用和更加快速,此方法为ElementTree。 python的xml模块为:
1)xml.dom.minidom 2)xml.elementtree 3)xml.sax + xml.dom 。
二 xml实例:(employees.xml) 。
1
2
3
4
5
6
7
8
9
10
11
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
employees
>
<
employee
>
<
name
>l inux </
name
>
<
age
> 30 </
age
>
</
employee
>
<
employee
>
<
name
>windows </
name
>
<
age
> 20 </
age
>
</
employee
>
</
employees
>
|
三 使用xml.dom.minidom来读写xml 1)使用xml.dom.minidom来解析xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
def
TestMiniDom():
from
xml.dom
import
minidom
doc
=
minidom.parse(
"employees.xml"
)
# get root element: <employees/>
root
=
doc.documentElement
# get all children elements: <employee/> <employee/>
employees
=
root.getElementsByTagName(
"employee"
)
for
employee
in
employees:
print
(
" ------------------------------------------- "
)
# element name : employee
print
(employee.nodeName)
# element xml content : <employee><name>windows</name><age>20</age></employee>
# basically equal to toprettyxml function
print
(employee.toxml())
nameNode
=
employee.getElementsByTagName(
"name"
)[
0
]
print
(nameNode.childNodes)
print
(nameNode.nodeName
+
":"
+
nameNode.childNodes[
0
].nodeValue)
ageNode
=
employee.getElementsByTagName(
"age"
)[
0
]
print
(ageNode.childNodes)
print
(ageNode.nodeName
+
":"
+
ageNode.childNodes[
0
].nodeValue)
print
(
" ------------------------------------------- "
)
for
n
in
employee.childNodes:
print
(n)
TestMiniDom()
|
2)使用xml.dom.minidom来生成xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def
CreateXml():
import
xml.dom.minidom
impl
=
xml.dom.minidom.getDOMImplementation()
dom
=
impl.createDocument(
None
,
'employees'
,
None
)
root
=
dom.documentElement
employee
=
dom.createElement(
'employee'
)
root.appendChild(employee)
nameE
=
dom.createElement(
'name'
)
nameT
=
dom.createTextNode(
'linux'
)
nameE.appendChild(nameT)
employee.appendChild(nameE)
ageE
=
dom.createElement(
'age'
)
ageT
=
dom.createTextNode(
'30'
)
ageE.appendChild(ageT)
employee.appendChild(ageE)
f
=
open
(
'employees2.xml'
,
'w'
)
dom.writexml(f, addindent
=
' '
, newl
=
'\n'
,encoding
=
'utf-8'
)
f.close()
CreateXml()
|
3)使用xml.dom.minidom需要注意的 。
*使用parse()或createDocument()返回的为DOM对象; *使用DOM的documentElement属性可以获得Root Element; *DOM为树形结构,包含许多的nodes,其中element是node的一种,可以包含子elements,textNode也是node的一种,是最终的子节点; *每个node都有nodeName,nodeValue,nodeType属性,nodeValue是结点的值,只对textNode有效。对于textNode,想得到它的文本内容可以使用: .data属性。 *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' *getElementsByTagName()可以根据名字来查找子elements; *childNodes返回所有的子Nodes,其中所有的文本均为textNode,包含元素间的‘\n\r'和空格均为textNode; *writexml() 时addindent=' '表示子元素的缩进,newl='\n'表示元素间的换行,encoding='utf-8'表示生成的xml的编码格式(<?xml version="1.0" encoding="utf-8"?>).
希望本文所述对大家的Python程序设计有所帮助.
最后此篇关于Python使用minidom读写xml的方法的文章就讲到这里了,如果你想了解更多关于Python使用minidom读写xml的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有以下任一代码: import urllib from xml.dom import minidom res = urllib.urlopen('https://www.google.com/web
我已经阅读了这里有关此问题的几个答案,但仍然无法解决它。 基本上,我想打印子节点的nodeValue。 这是 xml: true 2 500 10000
快速提问,当您看到错误“builtins.IndexError: list index out of range”时,正确的解决方案是什么? 这是引用另一个 thread 我已经开始了,但我不想让它出
我有一个具有这种结构的 xml 文件: EB 23242 EB 我想检查visit标签中是否存在每一列,如果不存在我想返回Non
我正在将一段 JS 代码转换为 Python,并且我一直在使用 mini DOM,但某些事情无法正常工作。他们在 JavaScript 中运行时正在查找。我进行转换是因为我想要一致的更改/顺序(即添加
我有一个具有以下结构的 xml 文件: ... ... ...
我递归地遍历 XML 中的所有节点: def verify_elements_children(root): if root.childNodes: for node in r
我需要从此 XML 文件读取数据。我不知道如何从这个 XML 文件中读取数据 aaaaa、bbbbb、ccccc、ddddd、eeeee、fffff 和 ggggg。
我正在寻找使用 xml minidom 提取 xml 文件的内容,示例如下: text1 text2 text3 以下代码仅提取“
8 小时以来,我现在尝试解析 XML 并将 5 行文本添加到 xml 中。我真的没有取得任何进展,writexml、toxml 和 saveXML 似乎都无法在 minidom 库中工作 我们要解析
我有以下功能: def removeNodes(mydom, name): nodeList = mydom.getElementsByTagName('option') # in p
我正在使用Python的minidom解析文档,例如: This tag contains a "" string ""字符串导致 xml.parsers.expat.ExpatError:
我目前正在使用 IRC Bot,并希望从如下所示的 XML 文件中检索配置: HOST1 6667 CHANNAME1 CHANNAME2
是否可以使用 minidom 获取节点的名称? 例如我有一个节点: 我想做的是存储值 heading 以便我可以将它用作字典中的键。 我能得到的最接近的是这样的: [] 我确定我在这里忽略了一些非常
我想遍历一个dom节点的所有属性并获取名称和值 我试过这样的事情(文档对此不是很详细所以我猜了一点): for attr in element.attributes: attrName = a
给定 如何在不遍历每个标签并检查属性的情况下立即获取名称为“frame.len”的字段? 最佳答案 我认为你做不到。 来自父element , 你需要 for subelement i
在使用 minidom 处理 XML 时,有没有一种方法可以保留属性的原始顺序? 假设我有:当我用 minidom 修改它时,属性按字母顺序重新排列为蓝色、绿色和红色。我想保留原始订单。 我正在通过遍
我目前面临的 XML 看起来像这样: 345754 这包含在层次结构中。我已经解析了 xml,并希望通过搜索“345754”找到 ID 节点。 最佳答案 vartec 的回答需要更正(抱歉,我不确定我
我有这个 xml 结构, 我如何检查 minidom,root 是 root,并且子元素始终是 followin 元素? ch
我正在使用 Python 和 minidom 将数据插入现有的 XML 文件中。当我这样做时,我得到了正确的 XML 代码,但它看起来不像我想要的那样。这是我的 xml 文件开头的示例。
我是一名优秀的程序员,十分优秀!