免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4281 | 回复: 0
打印 上一主题 下一主题

Python学习笔记-XML大文件的XSD验证方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-28 13:45 |只看该作者 |倒序浏览
先说说需求,因为和客户合作,对方要求按规定的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没具体统计,但也慢的。这里只是说一下实际情况,不讨论原因。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP