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