2009-08-10 119 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