作用:
- DOM(Document Object Model),通过构建一个树结构来表示整个XML文档,一旦树被构建,可以通过DOM提供的接口来遍历树和提取相应的数据
Python版本:
函数定义:
- minidom.parse('employees.xml') #读入整个xml文档,返回DOM对象
- DOM对象
- doc.documentElement #返回Root Element对象
- nodes
- element对象,非叶子节点,即存在子节点的节点
- getElementsByTagName('employee') #根据子节点名称返回子节点(Element)列表,搜索了当前元素的所有子元素,包括所有层次的子元素
- toxml()
- childNodes属性,返回所有子节点,只返回第一层子节点
- nodeValue属性,节点值
- nodeName属性,节点名称
- nodeType属性,节点类型,包含以下类型:ARRTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE
- getAttribute('id') #获取元素的属性值
- textNode,最终的子节点
- nodeName属性 #节点名称
- nodeValue属性 #节点值
- nodeType属性 #节点类型, 判断节点类型:if node.nodeType == node.ELEMENT_NODE
- data属性,获取节点的文本内容
- element对象,非叶子节点,即存在子节点的节点
应用实例:
- 实例:
- import xml.dom.minidom
- doc = xml.dom.minidom.parse('employees.xml') #载入xml文件
- root = doc.documentElement #获取根节点
- print root.nodeName #获得根节点的名称employees
- for node in root.childNodes:
- if node.nodeType in (node.TEXT_NODE, node.CDATA_SECTION_NODE):
- print 'text node: ', node.data
- if node.nodeType in (node.ELEMENT_NODE):
- if node.nodeName == 'employee':
- print 'attribute id: ', node.getAttribute('id') #获取元素属性
- for node in root.getElementsByTagName('employee'): #搜索所有子节点
- print 'id: ', node.getAttribute('id')
- print 'name: ', node.getElementsByTagName('name')[0].childnodes[0].nodeName
- print 'value: ', node.getElementsByTagName('name')[0].childnodes[0].data
- xml样例(employees.xml)
- <?xml version="1.0" encoding="utf-8"?>
- <employees>
- <maxId>4</maxId>
- <employee id='1'>
- <name>joe</name>
- <gender>male</gender>
- </employee>
- <employee id='2'>
- <name>Jack</name>
- <gender>male</gender>
- </empoyee>
- </employees>