标签:
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")
导入xml.dom.minidom模块,生成dom对象
得到文档对象(根对象)
通过getElementsByTagName()方法和childNodes属性(还有其它一些方法和属性)找到要处理的元素
取得元素下文本结点的内容
from xml.dom import minidom
imp = minidom.getDOMImplementation()
dom = imp.createDocument(None, ‘booklist‘, None)
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()
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
f = open(r‘e:\text.xml‘,‘w‘)
dom.writexml(f)
贺广福(heguangfu)@2015-9-17
标签:
原文地址:http://my.oschina.net/hgfdoing/blog/507804