最近发现自己一个很不好的毛病就是有的时候为了完成工作的任务,google下问题的解决方法就很快过去了。但是其实自己并不是特别理解或者理解得不是很透彻。
觉着这样太不好,没提高,于是开始从头开始趁着闲工夫理清楚一些问题:
python用Dom解析XML是我最近遇到的一个问题:
首先看下XML的格式:
DOM 的五个基本对象: Document , Node , NodeList , Element 和 Attr 。
Python中队Document的解释是这样的:
A Document represents an entire XML document, including its constituent elements, attributes, processing instructions, comments etc. Remember that it inherits properties from Node .
代表整个XML文档,包含有元素,属性等
Nodelist是从Node继承而来的,表示一系列的Node
Node:All of the components of an XML document are subclasses of Node .
说的是所有的XML文档中的component都是Node的子类
它包含很多方法:http://docs.python.org/library/xml.dom.html?highlight=getelementsbytagname#dom-node-objects
Element:代表的是 XML 文档中的标签元素,继承于 Node
Attr :代表xml文档的属性,需要注意的是: Attribute value nodes on element nodes.
具体来看一个XML文档的解析:
下面只是XML文档的某个片段,整个文档包含几个system node
<system platform="linux" name="server">
<purpose>r</purpose>
<system_type></system_type>
<ip_address></ip_address>
<userid>rt</userid>
<password>y</password>
<image_name></image_name>
<instance_name></instance_name>
<instance_comments>LRB BVT</instance_comments>
<commands_on_boot> </commands_on_boot>
</system>
现在我需要获取purpose的字段,怎么做么?
先看一个类中的方法:
def getSystemPurpose(self,platform,name):
rc =[]
for nodes in self.dom.getElementsByTagName("system"):
title = ""
for node3 in node2.childNodes:#nodes.chindNodes:获取所有的子节点,如果purpose有多个的话则依次取出其值。
if node3.nodeType == Node.TEXT_NODE:
title += node3.data
print title
关于XML dom:
XML DOM 是:
XML DOM 定义了所有 XML 元素的对象和属性 ,以及访问它们的方法(接口) 。
换句话说:
XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。
根据 DOM,XML 文档中的每个成分都是一个节点 。
DOM 是这样规定的: