python处理xml

python处理xml

    • 读取xml
      • 获取dom对象
      • 获取文档对象
      • 节点属性
      • 子节点的访问
      • 文本节点
      • 获取节点属性
      • 小结:使用minidom来读取XML中的信息
    • 编辑xml
      • 生成dom对象
      • 显示生成的xml内容
      • 获取根元素
      • 元素后添加子元素和元素属性
      • 生成CDATA节点
      • 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)