私はXMLファイルを持っており、XMLスキーマを持っています。私は、そのスキーマに対してファイルを検証し、そのスキーマに従っているかどうか確認したいと思います。私はPythonを使用していますが、そのような有用なライブラリがPythonにない場合は、その問題のために任意の言語に対応しています。スキーマに対するXML(.xsd)フィード検証
私の最高のオプションは何ですか?私はこれをいかに速く動かすことができるか心配しています。
私はXMLファイルを持っており、XMLスキーマを持っています。私は、そのスキーマに対してファイルを検証し、そのスキーマに従っているかどうか確認したいと思います。私はPythonを使用していますが、そのような有用なライブラリがPythonにない場合は、その問題のために任意の言語に対応しています。スキーマに対するXML(.xsd)フィード検証
私の最高のオプションは何ですか?私はこれをいかに速く動かすことができるか心配しています。
間違いなくlxml
。
、事前に定義されたスキーマでXMLParser
の定義ファイルfromstring()
をロードして、任意のXML Schemaエラーをキャッチ:
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
Pythonのスニペットが良いですが、選択肢はxmllintを使用することです:
xmllint -schema sample.xsd --noout sample.xml
これは同じ問題でグーグルが見つかりました - 私は別のXMLライブラリ私は組み込みのxml.etreeモジュールを使用してXMLを生成しています)。 – nrlakin
それはうまくいきます。そこに簡単なチュートリアルはありますか?私はスキーマとフィードファイルを渡し、両方を取り、それらを処理しました。検証済みかどうかはどうすればわかりますか? – Scooby
それは簡単です。 'etree.fromstring'は、xmlファイルが検証されないと例外をスローします。 – alecxe
うわー、それは速かった。今は、複数のXMLフィードを読み込み、スキーマに対して検証する必要があります。だから私はそれをループからループすることができますか? 1.処理を停止して他のフィードを無視する例外はありますか?私はすべてのフィードファイルを処理し、可能であれば、それがどこで失敗したか、または検証しなかったかについてのエラーを出したいでしょう。 2.フィードには多くのレコードが含まれている可能性があります。すべてのレコードを実行し、検証の合否に基づいてレコードを分割する方法はありますか。 – Scooby