码迷,mamicode.com
首页 > 编程语言 > 详细

python处理xml

时间:2015-09-17 19:58:43      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

python处理xml

读取xml

获取dom对象

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

  1. 方法一:

from xml.dom import minidom
dom = minidom.parse("e:\test.xml")
  1. 方法二:

from xml.dom import minidom
f = open("e:\test.xml", ‘r‘)
dom = minidom.parse("e:\test.xml")

获取文档对象

获取根元素:

root = dom.documentElement

节点属性

每一个结点都有它的 nodeNamenodeValuenodeType 属性。 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  #根元素的值,只对文本结点有效

子节点的访问

  1. 使用getElementsByTagName方法
    getElementsByTagName方法返回一个列表。(通过搜索所有层次的元素,找到tagname为给定字符串的所有元素的列表)
    语句:root.getElementsByTagName(‘title‘)
    结果:[ ]

  2. 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中的信息

  1. 导入xml.dom.minidom模块,生成dom对象

  2. 得到文档对象(根对象)

  3. 通过getElementsByTagName()方法和childNodes属性(还有其它一些方法和属性)找到要处理的元素

  4. 取得元素下文本结点的内容

编辑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

python处理xml

标签:

原文地址:http://my.oschina.net/hgfdoing/blog/507804

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!