python处理xml
python
xml
读取xml
获取dom对象
DOM是Document Object Model
的简称,它是以对象树来表示一个XML文档的方法,使用它的好处就是你可以非常灵活的在对象中进行遍历。
- 方法一:
from xml.dom import minidom
dom = minidom.parse("e:\test.xml")
- 方法二:
from xml.dom import minidom
f = open("e:\test.xml", ‘r‘)
dom = minidom.parse("e:\test.xml")
获取文档对象
获取根元素:
root = dom.documentElement
节点属性
每一个结点都有它的 nodeName
, nodeValue
, nodeType
属性。 nodeName
为结点名字。 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‘
root.nodeName #根元素的名字
root.nodeType #根元素的节点类型
root.nodeValue #根元素的值,只对文本结点有效
子节点的访问
- 使用
getElementsByTagName
方法
getElementsByTagName
方法返回一个列表。(通过搜索所有层次的元素,找到tagname为给定字符串的所有元素的列表)
语句:root.getElementsByTagName(‘title‘)
结果:[ ]
。 childNodes
属性
childNodes
属性返回某节点的所有直接子节点和直接子元素。即childNodes
只保存了当前元素的第一层子结点。
语句:root.childNodes
结果:[ , ]
。
例子:打印根元素的所有直接子元素名字
for node in root.childNodes:
if node.nodeType == node.ELEMENT_NODE:
print node.nodeName
文本节点
获取文本结点的文本内容可以使用: data
属性
例子:
elements = root.getElementsByTagName("title")
for x in elements:
for y in x.childNodes:
if y.nodeType == y.TEXT_NODE:
print y.data
获取节点属性
getAttribute
方法获取节点属性。
nodes = root.getElementsByTagName("book")
for node in nodes:
print x.getAttribute("id")
小结:使用minidom来读取XML中的信息
- 导入xml.dom.minidom模块,生成dom对象
- 得到文档对象(根对象)
- 通过getElementsByTagName()方法和childNodes属性(还有其它一些方法和属性)找到要处理的元素
- 取得元素下文本结点的内容
编辑xml
生成dom对象
from xml.dom import minidom
imp = minidom.getDOMImplementation()
dom = imp.createDocument(None, ‘booklist‘, None)
显示生成的xml内容
dom.toxml()
获取根元素
root = dom.documentElement
元素后添加子元素和元素属性
root = dom.documentElement
book = dom.createElement("book")
book.setAttribute("id", "011")
text = dom.createTextNode("my book is from England!")
book.appendChild(text)
root.appendChild(book)
dom.toxml()
dom.toprettyxml()
生成CDATA节点
data = dom.createCDATASection("content\nmyContent")
root.appendChild(data)
root.toxml()
结果:
\n<booklist>\n\t<book id="011">my book is from England! book>\ncontent\nmyContent booklist>\n
xml导入到文件
f = open(r‘e:\text.xml‘,‘w‘)
dom.writexml(f)
贺广福(heguangfu)@2015-9-17
时间: 2024-08-24 20:15:58