天天看点

《Python Cookbook(第3版)中文版》——6.7 用命名空间来解析XML文档

本节书摘来自异步社区《python cookbook(第3版)中文版》一书中的第6章,第6.7节,作者[美]david beazley , brian k.jones,陈舸 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

我们要解析一个xml文档,但是需要使用xml命名空间来完成。

考虑使用了命名空间的如下xml文档:

如果解析这个文档并尝试执行普通的查询操作,就会发现没那么容易实现,因为所有的东西都变得特别冗长啰嗦:

通常可以将命名空间的处理包装到一个通用的类中,这样可以省去一些麻烦:

要使用这个类,可以按照下面的方式进行:

对包含有命名空间的xml文档进行解析会非常繁琐。xmlnamespaces类的功能只是用来稍微简化一下这个过程,它允许在后序的操作中使用缩短的命名空间名称,而不必去使用完全限定的uri。

不幸的是,在基本的elementtree解析器中不存在什么机制能获得有关命名空间的进一步信息。但是如果愿意使用iterparse()函数的话,还是可以获得一些有关正在处理的命名空间范围的信息。示例如下:

最后要提到的是,如果正在解析的文本用到了除命名空间之外的其他高级xml特性,那么最好还是使用lxml库。比方说,lxml对文档的dtd验证、更加完整的xpath支持和其他的高级xml特性提供了更好的支持。本节提到的技术只是为解析操作做了一点修改,使得这个过程能够稍微简单一些。