Python學習筆記-XML大檔案的XSD驗證方法

來源:互聯網
上載者:User

先說說需求,因為和客戶合作,對方要求按規定的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沒具體統計,但也慢的。這裡只是說一下實際情況,不討論原因。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.