2013-04-18 7 views
5

Ich verwende lxml in Python, um eine Anzahl von XML-Dokumenten gegen eine XML-Schema-Definition zu validieren. Eine große Anzahl dieser Dokumente wird nicht validiert - und im Moment werden sie nicht erwartet -, aber es wäre nützlich, wenn ich für die Zwecke der Berichterstattung berechnen könnte, wie gültig sie sind. Ich habe die Möglichkeit, xmllint oder andere Befehlszeilen-Tools zu verwenden, sollten diese in der Lage sein, eine nützliche Statistik zur Verfügung zu stellen.XMLSchema: Kann berechnet werden, wie gültig ein ungültiges Dokument ist (z. B. in Prozent)?

Antwort

1

lxml Parser bieten eine Möglichkeit, a list of the errors zu erhalten, während beim Versuch, das Dokument zu analysieren. Kombinieren Sie dies mit dem Parser recover keyword argument und man bekommt etwas wie folgt aus:

# Warning, untested, may not work 
parser = etree.XMLParser(recover=True) 
it_would_be_a_tree = etree.parse(your_xml_data, parser) 
total_errors = len(parser.error_log) 

Dann können Sie den Prozentsatz der Datei berechnen, die total_errors darstellt. Sie könnten eine naive Maßnahme wie Fehler pro Zeile oder Fehler pro Zeichen ohne Probleme verwenden. Kompliziertere Maßnahmen sind auch möglich, wenn it_would_be_a_tree tatsächlich eine tree Struktur ist (z. B. total_elements/total_errors).

+1

Es ist nicht das Parsing, das ist das Problem; Die Dateien werden gut analysiert, da sie wohlgeformtes XML sind. Sie sind nur nicht * gültig * in Bezug auf das XMLSchema. –