📄 reader6.py
字号:
#!/usr/bin/python -u## this tests the entities substitutions with the XmlTextReader interface#import sysimport StringIOimport libxml2schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <oneOrMore> <element name="label"> <text/> </element> <optional> <element name="opt"> <empty/> </element> </optional> <element name="item"> <data type="byte"/> </element> </oneOrMore></element>"""# Memory debug specificlibxml2.debugMemory(1)## Parse the Relax NG Schemas# rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema))rngs = rngp.relaxNGParse()del rngp## Parse and validate the correct document#docstr="""<foo><label>some text</label><item>100</item></foo>"""f = StringIO.StringIO(docstr)input = libxml2.inputBuffer(f)reader = input.newTextReader("correct")reader.RelaxNGSetSchema(rngs)ret = reader.Read()while ret == 1: ret = reader.Read()if ret != 0: print "Error parsing the document" sys.exit(1)if reader.IsValid() != 1: print "Document failed to validate" sys.exit(1)## Parse and validate the incorrect document#docstr="""<foo><label>some text</label><item>1000</item></foo>"""err=""# RNG errors are not as good as before , TODO#expect="""RNG validity error: file error line 3 element text#Type byte doesn't allow value '1000'#RNG validity error: file error line 3 element text#Error validating datatype byte#RNG validity error: file error line 3 element text#Element item failed to validate content#"""expect="""Type byte doesn't allow value '1000'Error validating datatype byteElement item failed to validate content"""def callback(ctx, str): global err err = err + "%s" % (str)libxml2.registerErrorHandler(callback, "")f = StringIO.StringIO(docstr)input = libxml2.inputBuffer(f)reader = input.newTextReader("error")reader.RelaxNGSetSchema(rngs)ret = reader.Read()while ret == 1: ret = reader.Read()if ret != 0: print "Error parsing the document" sys.exit(1)if reader.IsValid() != 0: print "Document failed to detect the validation error" sys.exit(1)if err != expect: print "Did not get the expected error message:" print err sys.exit(1)## cleanup#del fdel inputdel readerdel rngslibxml2.relaxNGCleanupTypes()# Memory debug specificlibxml2.cleanupParser()if libxml2.debugMemory(1) == 0: print "OK"else: print "Memory leak %d bytes" % (libxml2.debugMemory(1)) libxml2.dumpMemory()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -