我有一個XML文件,並且我有一個XML模式。我想根據該模式驗證文件並檢查它是否符合該模式。我正在使用python,但如果在python中沒有這樣有用的庫,我可以對任何語言開放。針對模式的XML(.xsd)供稿驗證
這裏我最好的選擇是什麼?我會擔心我能以多快的速度啓動並運行。
我有一個XML文件,並且我有一個XML模式。我想根據該模式驗證文件並檢查它是否符合該模式。我正在使用python,但如果在python中沒有這樣有用的庫,我可以對任何語言開放。針對模式的XML(.xsd)供稿驗證
這裏我最好的選擇是什麼?我會擔心我能以多快的速度啓動並運行。
當然lxml
。
定義一個XMLParser
預定義模式,加載文件fromstring()
和捕捉任何XML架構錯誤:
from lxml import etree
def validate(xmlparser, xmlfilename):
try:
with open(xmlfilename, 'r') as f:
etree.fromstring(f.read(), xmlparser)
return True
except etree.XMLSchemaError:
return False
with open(schema_file, 'r') as f:
schema_root = etree.XML(f.read())
schema = etree.XMLSchema(schema_root)
xmlparser = etree.XMLParser(schema=schema)
filenames = ['input1.xml', 'input2.xml', 'input3.xml']
for filename in filenames:
if validate(xmlparser, filename):
print "%s validates" % filename
else:
print "%s doesn't validate" % filename
蟒蛇片段是好,但更好的方法是使用xmllint:
xmllint -schema sample.xsd --noout sample.xml
剛剛發現這個谷歌搜索同樣的問題 - 我喜歡這個安裝另一個XML庫(我正在使用內置的xml.etree模塊來生成XML)。 – nrlakin
它確實有效,是的。有關於它的簡要教程?我傳遞了模式和提要文件,並將它們都處理並處理了它們。我如何知道它是否得到驗證? – Scooby
很簡單。如果xml文件不驗證,'etree.fromstring'將會引發異常。 – alecxe
哇,那很快。現在的事情是我想讀取多個XML提要並根據模式驗證它們。所以我可以通過fromString來循環它們? 1.如果發生異常,它會停止處理並忽略其他提要?我想要處理所有的提要文件,然後如果可能的話給出一個錯誤,說明它在失敗或未驗證的地方。 2.此外,它的feed可能有很多記錄,是否有任何方法可以運行所有這些記錄,並在通過或未通過驗證的基礎上對它們進行劃分。 – Scooby