1

lxml パッケージ (etree) を使用して xml スキーマを取り込み、コードを使用して xml ファイルに対して解析しています。

from lxml import etree
import traceback
schema_file = 'C:/Users/Romi/Desktop/XML Testing/schema.xsd'

def validate(xmlparser, xmlfilename):
try:
    with open(xmlfilename, 'r') as f:
        etree.fromstring(f.read(), xmlparser) 
    return True
except:
    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 = ['C:/Users/Romi/Desktop/XML Testing/feed.xml','C:/Users/Romi/Desktop/XML          Testing/feed1.xml' ]
fo = open("C:/Users/Romi/Desktop/XML Testing/result.txt", "r+") 
for filename in filenames:
if validate(xmlparser, filename):
    print "%s validates with the schema." % filename
    #fo.write("%s validates with the schema." % filename)
else:
    print "%s doesn't validate with the schema." % filename
    #fo.write("%s doesn't validate with the schema." % filename)

検証されないときにエラーを出力していますが、失敗した場所を正確に示すトレースバック全体を出力して、検証のために次のファイルに移動したいと考えています。

ポインタはありますか?

4

1 に答える 1

3

traceback ライブラリを使用して、例外キャッチでスタック トレースを出力できます。

http://docs.python.org/2/library/traceback.html#traceback-examples

ところで、例外処理を制限することをお勧めします。lxml 解析エラーのみをキャッチするように変更します。たとえば、open() が失敗した場合、validate() 関数は False を返します。

これに沿った何か:

try:
  with open(xmlfilename, 'r') as f:
    return etree.fromstring(f.read(), xmlparser)
except etree.XMLSyntaxError:
  print traceback.format_exc()

それが役立つことを願っています!

于 2013-07-30T21:55:32.390 に答える