lxml
XPATH
Python
Børre Stenseth
lxml >Validering

Validering med Schema

Hva

lxml gir mulighet for å validere XML

De aktuelle dataene er ordnet i en XML-fil med korrekte, validerbare data: all_results.xml

Kopier filer og pythonkoden nedenfor og eksperimenter. Eksperimenter med forskjellige varianter av filer som ikke validerer, brukt som XMLFILE_UNVALID='all_results_unvalid.xml' i koden nedenfor.

Eksempel

"""
validating with schema
"""
from lxml import etree
"""
testfiles
"""
XMLFILE_OK='../lxml/all_results.xml'
XMLFILE_UNVALID='../lxml/all_results_unvalid.xml'
SCHEMAFILE='../lxml/olymp.xsd'
"""
valid
"""
def testing1():
    xml_tree=etree.parse(XMLFILE_OK)
    schema_tree=etree.parse(SCHEMAFILE)
    schema=etree.XMLSchema(schema_tree)
    result=schema.validate(xml_tree)
    print (result) #True
"""
not valid
"""
def testing2():
    xml_tree=etree.parse(XMLFILE_UNVALID)
    schema_tree=etree.parse(SCHEMAFILE)
    schema=etree.XMLSchema(schema_tree)
    result=schema.validate(xml_tree)
    print (result) #False
"""
not valid, with report
"""
def testing3():
    xml_tree=etree.parse(XMLFILE_UNVALID)
    schema_tree=etree.parse(SCHEMAFILE)
    schema=etree.XMLSchema(schema_tree)
    try:
        schema.assertValid(xml_tree)
    except:
        log = schema.error_log
        error = log.last_error
        print (error)
        
    
testing1()
testing2()
testing3()

Den siste metoden, testing3(), gir i mitt tilfelle følgende utskrift:

../lxml/all_results_unvalid.xml:7:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element 'result': 
This element is not expected. Expected is ( nation ).
_olymp.xsd
[1]
Referanser
  1. lxml - XML and HTML with Python lxml.de/ 03-03-2014
lxml >Validering