Python学习笔记-XML大文件的XSD验证方法

先说说需求,因为和客户合作,对方要求按规定的XML格式(通过XML Schema)来提供数据。本身XML验证没什么问题的,但是当XML的文件很大时,我们现在是100M左右。你如何去确认生成的XML是否符合XSD文件的定义呢。用人眼睛去看,这可是几十万条数据,肯定只能通过XML自身的验证机制来处理了。
XML的格式验证方法就这几个,如果你的文件只有几M,这个可以通过XMLSPY、XMLPAD,这些工具都可以验证。但这个100M的文件,这些工具都没办法打开。
对方公司是linux的,linux有xmllint --schema *.xsd *.xml > /dev/null 可以用来验证。郁闷的是我用Windows,没办法就只能自己写代码了。

发现Python2.5没有库支持XML Schema。只能找第三方的,最后找到的就是这个lxml(辛苦的,花了两天时间折腾这个,最好看个例子,写起来很快)
1:下载地址http://codespeak.net/lxml/
2:直接提供验代码:
#!/usr/bin/env python
#coding=gb2312
from lxml import etree
import timeit

def CheckXML():
    xmlschema_doc = etree.parse("local_feed.xsd.xml")
    xmlschema = etree.XMLSchema(xmlschema_doc)
    doc = etree.parse("google-local0.xml")
    print xmlschema.validate(doc)
    print >> open("log.txt","w"), xmlschema.error_log

if __name__ =='__main__':
    print 'start...'
    t = timeit.Timer('CheckXML()','from __main__ import CheckXML')
    print t.repeat(1,1)
    print 'end. any key exit...'
    input()

Tips:
1:timeit 传说中的Python自备电池。但觉得有些不是很好用,下次再具体说一下。
2:print >> 输出重定向。很方便直接将错误保存成文件
3:还有就是lxml的这个Module的使用啦。这个module貌似比较强大。python官方的下载也是最高的,以后再进一步学习吧。
4:用C#也写了一个同样的,发现C#大概不到60s,但lxml的方式要133s,liunx没具体统计,但也慢的。这里只是说一下实际情况,不讨论原因。