学以致用

focus on Python , C++, and some interest in Go and R

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

python标准库中的xml.etree.ElementTree使用起来很方便,对于xml的操作封装的也挺好。但有一些细节需要引起各位使用者的注意:
其中xml.etree.ElementTree的find 和 findall方法并不是完全支持XPath,不用说XPath2.0,就是连XPath1.0也只是支持了其中的一小部分,可以说只是支持了XPath1.0的一个子集吧。
从以下例子能很好的说明这个问题:
etree.find("AUTO/PROCESS_THREAD_OPERATE/TIME")
etree.find("AUTO/PROCESS_THREAD_OPERATE/TIME[@action='DNS_QUERY']")
都不会出问题,运行结果和预想一样,但如果运行以下操作:
etree.find("AUTO/PROCESS_THREAD_OPERATE/TIME[@action='DNS_QUERY' and @action='HTTP_ACCESS']")
就会报出一个invalid predicate的错误。
究其原因就是python标准库中的xml.etree.ElementTree对于XPath的支持很有限
如果要想完全采用XPath来操作,建议使用lxml的xpath

 

posted on 2012-06-02 15:48  Jerry.Kwan  阅读(3040)  评论(0编辑  收藏  举报