python有三种方法解析XML,SAX,DOM,以及ElementTree
###1.SAX (simple API for XML )
pyhton 标准库包含SAX解析器,SAX是一种典型的极为快速的工具,在解析XML时,不会占用大量内存。
但是这是基于回调机制的,因此在某些数据中,它会调用某些方法进行传递。这意味着必须为数据指定句柄,
以维持自己的状态,这是非常困难的。
###2.DOM(Document Object Model)
与SAX比较,DOM典型的缺点是比较慢,消耗更多的内存,因为DOM会将整个XML数读入内存中,并为树
中的第一个节点建立一个对象。使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的
父节点,谁是子节点。但是DOM用起来有些麻烦。
###3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少,这里主要
介绍ElementTree。
以上是从网络上摘抄下来的,根据这个描述,我直接使用第三种方法。分割线一下是我的实现
====================================================
我的XML文件设计:
(Project)
(Project)
红色部分是我为了写这个日志,而添加的说明。
我想要做的事情:根据ProjectName得到每个SiteCollection和HostName。
代码实现:
from xml.etree import ElementTree
def extractXMLGetBaseURL(XMLfile, ProjectName):
root = ElementTree.parse(XMLfile).getroot()
MyProjectName = root.find(ProjectName)
server = MyProjectName.find('ServerConfig')
print("HostName: " + server.get("HostName"))
print("SiteCollection: " + server.get("SiteCollection"))
extractXMLGetBaseURL(".\TestCase.xml", "BasicEnforcement")
运行结果:
HostName: pf1-w08-sps08
SiteCollection: BasicEnforcement
==Done
其他说明:
1. ElementTree.parse(FilePath)解析文件。
2. 解析之后用.getroot()获取root节点。
3. root.find()括号中可以直接带上节点的名字。如server=root.find("ServerConfig")
4. XXX.get()括号中可以直接写上attribute。如server.get("HostName")
5. XXX.attrib(),会返回所有attribute。
6. XXX.getchildren()会返回所有的children。