Python 用ElementTree读取XML文件

上一篇 / 下一篇  2015-04-24 10:17:15 / 个人分类:Python

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文件设计:
<SharePointEnforcer>
 <BasicEnforcement> (Project)
  <ServerConfig SiteCollection="AAAA" HostName="BBBB"/>
  <SPE-325 SiteName="325" ParentSite="" Function="OpenSiteViaFullURL"/>
 </BasicEnforcement>
 <PageLevelEntitlement>   (Project)
  <ServerConfig SiteCollection="CCCC" HostName="DDDD"/>
  <SPE-123 Function="OpenPage"/>
 </PageLevelEntitlement>
</SharePointEnforcer>

红色部分是我为了写这个日志,而添加的说明。

我想要做的事情:根据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。








TAG: ElementTree Python XML

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-15  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 52496
  • 日志数: 17
  • 建立时间: 2009-06-29
  • 更新时间: 2015-04-24

RSS订阅

Open Toolbar