2009-08-10 117 views
7

如何通过Python中紧凑的RELAX NG模式验证XML文档?如何在Python中使用RELAX NG模式验证XML文档?

+0

[与在Python XML模式验证]的可能重复(http://stackoverflow.com/questions/299588/validating-with-an-xml-schema-in -python) – 2010-11-26 18:01:58

+0

@TörökGábor那个问题没有问过关于放松 – oob 2012-04-15 03:40:21

回答

16

如何使用lxml

从文档:

>>> f = StringIO('''\ 
... <element name="a" xmlns="http://relaxng.org/ns/structure/1.0"> 
... <zeroOrMore> 
...  <element name="b"> 
...  <text /> 
...  </element> 
... </zeroOrMore> 
... </element> 
... ''') 
>>> relaxng_doc = etree.parse(f) 
>>> relaxng = etree.RelaxNG(relaxng_doc) 

>>> valid = StringIO('<a><b></b></a>') 
>>> doc = etree.parse(valid) 
>>> relaxng.validate(doc) 
True 

>>> invalid = StringIO('<a><c></c></a>') 
>>> doc2 = etree.parse(invalid) 
>>> relaxng.validate(doc2) 
False 
+0

谢谢!尽管lxml不支持紧凑语法,但可以使用Trang将其转换为xml http://www.thaiopensource.com/relaxng/trang.html – Epeli 2009-08-11 08:51:13

+0

有没有一种方法可以在文档无效时获得有用的反馈,而不是只是假? – 2012-09-17 07:47:37

+0

如果有人来到这里,并想知道前面的问题是否有答案,答案是肯定的。问题列表保存在'relaxng.error_log'中(在上面的代码中)。 – 2013-03-17 12:19:37