私はPython2.7とlxmlを使用して、RelaxNGで大きなxmlファイルを検証しています。xmlが正しく検証されない場合、問題の場所と性質に関して不正確な結果が得られます。通常は、「要素ElementNameはコンテンツの検証に失敗しました」とだけ表示されます。ここで、ElementNameは最上位の要素の名前です。
Javaで同じxmlファイルと同じrelaxngファイルを使用すると、エラーが発生した正確な行番号が取得されます。これが私が使用しているコードです:
from lxml import etree as ET
def ValidateXMLWithRNG(rng_file, xml_file):
isXMLValid = False
try:
doc = ET.ElementTree()
doc.parse(xml_file)
relaxng = ET.RelaxNG(file=rng_file)
isXMLValid = relaxng.assert_(doc)
except BaseException as ex:
log = relaxng.error_log
print log.last_error
return isXMLValid
lxmlとRelaxNGからより正確な結果を得る方法はありますか?